5.0.0-0.16
This commit is contained in:
parent
3f4ac1c552
commit
5b794eb004
1
.gitignore
vendored
1
.gitignore
vendored
@ -8,3 +8,4 @@
|
|||||||
/gcc-5.0.0-20150214.tar.bz2
|
/gcc-5.0.0-20150214.tar.bz2
|
||||||
/gcc-5.0.0-20150216.tar.bz2
|
/gcc-5.0.0-20150216.tar.bz2
|
||||||
/gcc-5.0.0-20150217.tar.bz2
|
/gcc-5.0.0-20150217.tar.bz2
|
||||||
|
/gcc-5.0.0-20150224.tar.bz2
|
||||||
|
33
gcc.spec
33
gcc.spec
@ -1,9 +1,9 @@
|
|||||||
%global DATE 20150217
|
%global DATE 20150224
|
||||||
%global SVNREV 220752
|
%global SVNREV 220934
|
||||||
%global gcc_version 5.0.0
|
%global gcc_version 5.0.0
|
||||||
# Note, gcc_release must be integer, if you want to add suffixes to
|
# Note, gcc_release must be integer, if you want to add suffixes to
|
||||||
# %{release}, append them after %{gcc_release} on Release: line.
|
# %{release}, append them after %{gcc_release} on Release: line.
|
||||||
%global gcc_release 0.15
|
%global gcc_release 0.16
|
||||||
%global _unpackaged_files_terminate_build 0
|
%global _unpackaged_files_terminate_build 0
|
||||||
%global _performance_build 1
|
%global _performance_build 1
|
||||||
%global multilib_64_archs sparc64 ppc64 ppc64p7 s390x x86_64
|
%global multilib_64_archs sparc64 ppc64 ppc64p7 s390x x86_64
|
||||||
@ -79,7 +79,7 @@
|
|||||||
Summary: Various compilers (C, C++, Objective-C, Java, ...)
|
Summary: Various compilers (C, C++, Objective-C, Java, ...)
|
||||||
Name: gcc
|
Name: gcc
|
||||||
Version: %{gcc_version}
|
Version: %{gcc_version}
|
||||||
Release: %{gcc_release}%{?dist}.1
|
Release: %{gcc_release}%{?dist}
|
||||||
# libgcc, libgfortran, libgomp, libstdc++ and crtstuff have
|
# libgcc, libgfortran, libgomp, libstdc++ and crtstuff have
|
||||||
# GCC Runtime Exception.
|
# GCC Runtime Exception.
|
||||||
License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD
|
License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD
|
||||||
@ -198,9 +198,7 @@ Patch11: gcc5-no-add-needed.patch
|
|||||||
Patch12: gcc5-libgo-p224.patch
|
Patch12: gcc5-libgo-p224.patch
|
||||||
Patch13: gcc5-aarch64-async-unw-tables.patch
|
Patch13: gcc5-aarch64-async-unw-tables.patch
|
||||||
Patch14: gcc5-libsanitize-aarch64-va42.patch
|
Patch14: gcc5-libsanitize-aarch64-va42.patch
|
||||||
Patch15: gcc5-pr32219-revert.patch
|
Patch15: gcc5-arm-fnsect.patch
|
||||||
Patch16: gcc5-pr65074-test.patch
|
|
||||||
Patch17: gcc5-pr65087.patch
|
|
||||||
|
|
||||||
# On ARM EABI systems, we do want -gnueabi to be part of the
|
# On ARM EABI systems, we do want -gnueabi to be part of the
|
||||||
# target triple.
|
# target triple.
|
||||||
@ -750,11 +748,7 @@ package or when debugging this package.
|
|||||||
rm -f libgo/go/crypto/elliptic/p224{,_test}.go
|
rm -f libgo/go/crypto/elliptic/p224{,_test}.go
|
||||||
%patch13 -p0 -b .aarch64-async-unw-tables~
|
%patch13 -p0 -b .aarch64-async-unw-tables~
|
||||||
%patch14 -p0 -b .libsanitize-aarch64-va42~
|
%patch14 -p0 -b .libsanitize-aarch64-va42~
|
||||||
%patch15 -p0 -b .pr32219-revert~
|
%patch15 -p0 -b .arm-fnsect~
|
||||||
%patch16 -p0 -b .pr65074-test~
|
|
||||||
rm -f gcc/testsuite/gcc.target/i386/pr32219-*.c
|
|
||||||
rm -f gcc/testsuite/gcc.dg/visibility-2{2,3}.c
|
|
||||||
%patch17 -p0 -b .pr65087~
|
|
||||||
|
|
||||||
%if 0%{?_enable_debug_packages}
|
%if 0%{?_enable_debug_packages}
|
||||||
mkdir dwz-wrapper
|
mkdir dwz-wrapper
|
||||||
@ -2940,9 +2934,18 @@ fi
|
|||||||
%doc rpm.doc/changelogs/libcc1/ChangeLog*
|
%doc rpm.doc/changelogs/libcc1/ChangeLog*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Sat Feb 21 2015 Till Maas <opensource@till.name> - 5.0.0-0.15.1
|
* Tue Feb 24 2015 Jakub Jelinek <jakub@redhat.com> 5.0.0-0.16
|
||||||
- Rebuilt for Fedora 23 Change
|
- update from the trunk
|
||||||
https://fedoraproject.org/wiki/Changes/Harden_all_packages_with_position-independent_code
|
- PRs ada/65100, ada/65156, bootstrap/63888, debug/58123, fortran/61960,
|
||||||
|
fortran/63427, fortran/64980, gcov-profile/64634, ipa/65087,
|
||||||
|
libstdc++/58357, libstdc++/64695, libstdc++/65085, lto/65012,
|
||||||
|
middle-end/65074, sanitizer/65081, target/63892, target/64172,
|
||||||
|
target/64452, target/64793, target/65064, target/65109, target/65153,
|
||||||
|
target/65163, target/65172, target/65181, testsuite/64158,
|
||||||
|
testsuite/65093, testsuite/65107, testsuite/65116, testsuite/65126,
|
||||||
|
tree-optimization/62217, tree-optimization/65063,
|
||||||
|
tree-optimization/65136, tree-optimization/65170
|
||||||
|
- fix arm_function_in_section_p
|
||||||
|
|
||||||
* Tue Feb 17 2015 Jakub Jelinek <jakub@redhat.com> 5.0.0-0.15
|
* Tue Feb 17 2015 Jakub Jelinek <jakub@redhat.com> 5.0.0-0.15
|
||||||
- update from the trunk
|
- update from the trunk
|
||||||
|
25
gcc5-arm-fnsect.patch
Normal file
25
gcc5-arm-fnsect.patch
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
2015-02-19 Richard Henderson <rth@redhat.com>
|
||||||
|
|
||||||
|
* config/arm/arm.c (arm_function_in_section_p): Delete bogus
|
||||||
|
TREE_STATIC check, use decl_binds_to_current_def_p instead of
|
||||||
|
targetm.binds_local_p.
|
||||||
|
|
||||||
|
--- gcc/config/arm/arm.c
|
||||||
|
+++ gcc/config/arm/arm.c
|
||||||
|
@@ -6392,14 +6392,8 @@ arm_set_default_type_attributes (tree type)
|
||||||
|
static bool
|
||||||
|
arm_function_in_section_p (tree decl, section *section)
|
||||||
|
{
|
||||||
|
- /* We can only be certain about functions defined in the same
|
||||||
|
- compilation unit. */
|
||||||
|
- if (!TREE_STATIC (decl))
|
||||||
|
- return false;
|
||||||
|
-
|
||||||
|
- /* Make sure that SYMBOL always binds to the definition in this
|
||||||
|
- compilation unit. */
|
||||||
|
- if (!targetm.binds_local_p (decl))
|
||||||
|
+ /* We can only be certain about the prevailing symbol definition. */
|
||||||
|
+ if (!decl_binds_to_current_def_p (decl))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
/* If DECL_SECTION_NAME is set, assume it is trustworthy. */
|
@ -1,269 +0,0 @@
|
|||||||
Revert:
|
|
||||||
2015-02-12 H.J. Lu <hongjiu.lu@intel.com>
|
|
||||||
Richard Henderson <rth@redhat.com>
|
|
||||||
|
|
||||||
PR rtl/32219
|
|
||||||
* cgraphunit.c (cgraph_node::finalize_function): Set definition
|
|
||||||
before notice_global_symbol.
|
|
||||||
(varpool_node::finalize_decl): Likewise.
|
|
||||||
* varasm.c (default_binds_local_p_2): Rename from
|
|
||||||
default_binds_local_p_1, add weak_dominate argument. Use direct
|
|
||||||
returns instead of assigning to local variable. Unify varpool and
|
|
||||||
cgraph paths via symtab_node. Reject undef weak variables before
|
|
||||||
testing visibility. Reorder tests for simplicity.
|
|
||||||
(default_binds_local_p): Use default_binds_local_p_2.
|
|
||||||
(default_binds_local_p_1): Likewise.
|
|
||||||
(decl_binds_to_current_def_p): Unify varpool and cgraph paths
|
|
||||||
via symtab_node.
|
|
||||||
(default_elf_asm_output_external): Emit visibility when specified.
|
|
||||||
|
|
||||||
--- gcc/cgraphunit.c (revision 220674)
|
|
||||||
+++ gcc/cgraphunit.c (revision 220673)
|
|
||||||
@@ -442,10 +442,8 @@ cgraph_node::finalize_function (tree dec
|
|
||||||
node->local.redefined_extern_inline = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
- /* Set definition first before calling notice_global_symbol so that
|
|
||||||
- it is available to notice_global_symbol. */
|
|
||||||
- node->definition = true;
|
|
||||||
notice_global_symbol (decl);
|
|
||||||
+ node->definition = true;
|
|
||||||
node->lowered = DECL_STRUCT_FUNCTION (decl)->cfg != NULL;
|
|
||||||
|
|
||||||
/* With -fkeep-inline-functions we are keeping all inline functions except
|
|
||||||
@@ -805,10 +803,8 @@ varpool_node::finalize_decl (tree decl)
|
|
||||||
|
|
||||||
if (node->definition)
|
|
||||||
return;
|
|
||||||
- /* Set definition first before calling notice_global_symbol so that
|
|
||||||
- it is available to notice_global_symbol. */
|
|
||||||
- node->definition = true;
|
|
||||||
notice_global_symbol (decl);
|
|
||||||
+ node->definition = true;
|
|
||||||
if (TREE_THIS_VOLATILE (decl) || DECL_PRESERVE_P (decl)
|
|
||||||
/* Traditionally we do not eliminate static variables when not
|
|
||||||
optimizing and when not doing toplevel reoder. */
|
|
||||||
--- gcc/varasm.c (revision 220674)
|
|
||||||
+++ gcc/varasm.c (revision 220673)
|
|
||||||
@@ -6802,97 +6802,97 @@ resolution_local_p (enum ld_plugin_symbo
|
|
||||||
|| resolution == LDPR_RESOLVED_EXEC);
|
|
||||||
}
|
|
||||||
|
|
||||||
-static bool
|
|
||||||
-default_binds_local_p_2 (const_tree exp, bool shlib, bool weak_dominate)
|
|
||||||
+/* Assume ELF-ish defaults, since that's pretty much the most liberal
|
|
||||||
+ wrt cross-module name binding. */
|
|
||||||
+
|
|
||||||
+bool
|
|
||||||
+default_binds_local_p (const_tree exp)
|
|
||||||
{
|
|
||||||
+ return default_binds_local_p_1 (exp, flag_shlib);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+bool
|
|
||||||
+default_binds_local_p_1 (const_tree exp, int shlib)
|
|
||||||
+{
|
|
||||||
+ bool local_p;
|
|
||||||
+ bool resolved_locally = false;
|
|
||||||
+ bool resolved_to_local_def = false;
|
|
||||||
+
|
|
||||||
+ /* With resolution file in hands, take look into resolutions.
|
|
||||||
+ We can't just return true for resolved_locally symbols,
|
|
||||||
+ because dynamic linking might overwrite symbols
|
|
||||||
+ in shared libraries. */
|
|
||||||
+ if (TREE_CODE (exp) == VAR_DECL && TREE_PUBLIC (exp)
|
|
||||||
+ && (TREE_STATIC (exp) || DECL_EXTERNAL (exp)))
|
|
||||||
+ {
|
|
||||||
+ varpool_node *vnode = varpool_node::get (exp);
|
|
||||||
+ if (vnode && (resolution_local_p (vnode->resolution) || vnode->in_other_partition))
|
|
||||||
+ resolved_locally = true;
|
|
||||||
+ if (vnode
|
|
||||||
+ && resolution_to_local_definition_p (vnode->resolution))
|
|
||||||
+ resolved_to_local_def = true;
|
|
||||||
+ }
|
|
||||||
+ else if (TREE_CODE (exp) == FUNCTION_DECL && TREE_PUBLIC (exp))
|
|
||||||
+ {
|
|
||||||
+ struct cgraph_node *node = cgraph_node::get (exp);
|
|
||||||
+ if (node
|
|
||||||
+ && (resolution_local_p (node->resolution) || node->in_other_partition))
|
|
||||||
+ resolved_locally = true;
|
|
||||||
+ if (node
|
|
||||||
+ && resolution_to_local_definition_p (node->resolution))
|
|
||||||
+ resolved_to_local_def = true;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
/* A non-decl is an entry in the constant pool. */
|
|
||||||
if (!DECL_P (exp))
|
|
||||||
- return true;
|
|
||||||
-
|
|
||||||
+ local_p = true;
|
|
||||||
/* Weakrefs may not bind locally, even though the weakref itself is always
|
|
||||||
static and therefore local. Similarly, the resolver for ifunc functions
|
|
||||||
might resolve to a non-local function.
|
|
||||||
FIXME: We can resolve the weakref case more curefuly by looking at the
|
|
||||||
weakref alias. */
|
|
||||||
- if (lookup_attribute ("weakref", DECL_ATTRIBUTES (exp))
|
|
||||||
+ else if (lookup_attribute ("weakref", DECL_ATTRIBUTES (exp))
|
|
||||||
|| (TREE_CODE (exp) == FUNCTION_DECL
|
|
||||||
&& lookup_attribute ("ifunc", DECL_ATTRIBUTES (exp))))
|
|
||||||
- return false;
|
|
||||||
-
|
|
||||||
+ local_p = false;
|
|
||||||
/* Static variables are always local. */
|
|
||||||
- if (! TREE_PUBLIC (exp))
|
|
||||||
- return true;
|
|
||||||
-
|
|
||||||
- /* With resolution file in hand, take look into resolutions.
|
|
||||||
- We can't just return true for resolved_locally symbols,
|
|
||||||
- because dynamic linking might overwrite symbols
|
|
||||||
- in shared libraries. */
|
|
||||||
- bool resolved_locally = false;
|
|
||||||
- bool defined_locally = false;
|
|
||||||
- if (symtab_node *node = symtab_node::get (exp))
|
|
||||||
- {
|
|
||||||
- if ((node->definition && !DECL_EXTERNAL (node->decl))
|
|
||||||
- || node->in_other_partition)
|
|
||||||
- {
|
|
||||||
- defined_locally = true;
|
|
||||||
- resolved_locally = (weak_dominate && !shlib);
|
|
||||||
- }
|
|
||||||
- if (resolution_to_local_definition_p (node->resolution))
|
|
||||||
- defined_locally = resolved_locally = true;
|
|
||||||
- else if (resolution_local_p (node->resolution))
|
|
||||||
- resolved_locally = true;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- /* Undefined weak symbols are never defined locally. */
|
|
||||||
- if (DECL_WEAK (exp) && !defined_locally)
|
|
||||||
- return false;
|
|
||||||
-
|
|
||||||
- /* A symbol is local if the user has said explicitly that it will be,
|
|
||||||
- or if we have a definition for the symbol. We cannot infer visibility
|
|
||||||
- for undefined symbols. */
|
|
||||||
- if (DECL_VISIBILITY (exp) != VISIBILITY_DEFAULT
|
|
||||||
- && (DECL_VISIBILITY_SPECIFIED (exp) || defined_locally))
|
|
||||||
- return true;
|
|
||||||
-
|
|
||||||
+ else if (! TREE_PUBLIC (exp))
|
|
||||||
+ local_p = true;
|
|
||||||
+ /* A variable is local if the user has said explicitly that it will
|
|
||||||
+ be. */
|
|
||||||
+ else if ((DECL_VISIBILITY_SPECIFIED (exp)
|
|
||||||
+ || resolved_to_local_def)
|
|
||||||
+ && DECL_VISIBILITY (exp) != VISIBILITY_DEFAULT)
|
|
||||||
+ local_p = true;
|
|
||||||
+ /* Variables defined outside this object might not be local. */
|
|
||||||
+ else if (DECL_EXTERNAL (exp) && !resolved_locally)
|
|
||||||
+ local_p = false;
|
|
||||||
+ /* If defined in this object and visibility is not default, must be
|
|
||||||
+ local. */
|
|
||||||
+ else if (DECL_VISIBILITY (exp) != VISIBILITY_DEFAULT)
|
|
||||||
+ local_p = true;
|
|
||||||
+ /* Default visibility weak data can be overridden by a strong symbol
|
|
||||||
+ in another module and so are not local. */
|
|
||||||
+ else if (DECL_WEAK (exp)
|
|
||||||
+ && !resolved_locally)
|
|
||||||
+ local_p = false;
|
|
||||||
/* If PIC, then assume that any global name can be overridden by
|
|
||||||
symbols resolved from other modules. */
|
|
||||||
- if (shlib)
|
|
||||||
- return false;
|
|
||||||
-
|
|
||||||
- /* Variables defined outside this object might not be local. */
|
|
||||||
- if (DECL_EXTERNAL (exp) && !resolved_locally)
|
|
||||||
- return false;
|
|
||||||
-
|
|
||||||
- /* Non-dominant weak symbols are not defined locally. */
|
|
||||||
- if (DECL_WEAK (exp) && !resolved_locally)
|
|
||||||
- return false;
|
|
||||||
-
|
|
||||||
+ else if (shlib)
|
|
||||||
+ local_p = false;
|
|
||||||
/* Uninitialized COMMON variable may be unified with symbols
|
|
||||||
resolved from other modules. */
|
|
||||||
- if (DECL_COMMON (exp)
|
|
||||||
- && !resolved_locally
|
|
||||||
- && (DECL_INITIAL (exp) == NULL
|
|
||||||
- || (!in_lto_p && DECL_INITIAL (exp) == error_mark_node)))
|
|
||||||
- return false;
|
|
||||||
-
|
|
||||||
+ else if (DECL_COMMON (exp)
|
|
||||||
+ && !resolved_locally
|
|
||||||
+ && (DECL_INITIAL (exp) == NULL
|
|
||||||
+ || (!in_lto_p && DECL_INITIAL (exp) == error_mark_node)))
|
|
||||||
+ local_p = false;
|
|
||||||
/* Otherwise we're left with initialized (or non-common) global data
|
|
||||||
which is of necessity defined locally. */
|
|
||||||
- return true;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-/* Assume ELF-ish defaults, since that's pretty much the most liberal
|
|
||||||
- wrt cross-module name binding. */
|
|
||||||
-
|
|
||||||
-bool
|
|
||||||
-default_binds_local_p (const_tree exp)
|
|
||||||
-{
|
|
||||||
- return default_binds_local_p_2 (exp, flag_shlib != 0, true);
|
|
||||||
-}
|
|
||||||
+ else
|
|
||||||
+ local_p = true;
|
|
||||||
|
|
||||||
-bool
|
|
||||||
-default_binds_local_p_1 (const_tree exp, int shlib)
|
|
||||||
-{
|
|
||||||
- return default_binds_local_p_2 (exp, shlib != 0, false);
|
|
||||||
+ return local_p;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Return true when references to DECL must bind to current definition in
|
|
||||||
@@ -6913,14 +6914,22 @@ decl_binds_to_current_def_p (const_tree
|
|
||||||
return false;
|
|
||||||
if (!TREE_PUBLIC (decl))
|
|
||||||
return true;
|
|
||||||
-
|
|
||||||
/* When resolution is available, just use it. */
|
|
||||||
- if (symtab_node *node = symtab_node::get (decl))
|
|
||||||
+ if (TREE_CODE (decl) == VAR_DECL
|
|
||||||
+ && (TREE_STATIC (decl) || DECL_EXTERNAL (decl)))
|
|
||||||
{
|
|
||||||
- if (node->resolution != LDPR_UNKNOWN)
|
|
||||||
+ varpool_node *vnode = varpool_node::get (decl);
|
|
||||||
+ if (vnode
|
|
||||||
+ && vnode->resolution != LDPR_UNKNOWN)
|
|
||||||
+ return resolution_to_local_definition_p (vnode->resolution);
|
|
||||||
+ }
|
|
||||||
+ else if (TREE_CODE (decl) == FUNCTION_DECL)
|
|
||||||
+ {
|
|
||||||
+ struct cgraph_node *node = cgraph_node::get (decl);
|
|
||||||
+ if (node
|
|
||||||
+ && node->resolution != LDPR_UNKNOWN)
|
|
||||||
return resolution_to_local_definition_p (node->resolution);
|
|
||||||
}
|
|
||||||
-
|
|
||||||
/* Otherwise we have to assume the worst for DECL_WEAK (hidden weaks
|
|
||||||
binds locally but still can be overwritten), DECL_COMMON (can be merged
|
|
||||||
with a non-common definition somewhere in the same module) or
|
|
||||||
@@ -7440,10 +7449,9 @@ default_elf_asm_output_external (FILE *f
|
|
||||||
{
|
|
||||||
/* We output the name if and only if TREE_SYMBOL_REFERENCED is
|
|
||||||
set in order to avoid putting out names that are never really
|
|
||||||
- used. Always output visibility specified in the source. */
|
|
||||||
+ used. */
|
|
||||||
if (TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))
|
|
||||||
- && (DECL_VISIBILITY_SPECIFIED (decl)
|
|
||||||
- || targetm.binds_local_p (decl)))
|
|
||||||
+ && targetm.binds_local_p (decl))
|
|
||||||
maybe_assemble_visibility (decl);
|
|
||||||
}
|
|
||||||
|
|
||||||
--- gcc/testsuite/gcc.target/i386/pr64317.c (revision 220674)
|
|
||||||
+++ gcc/testsuite/gcc.target/i386/pr64317.c (revision 220673)
|
|
||||||
@@ -1,7 +1,7 @@
|
|
||||||
/* { dg-do compile { target { *-*-linux* && ia32 } } } */
|
|
||||||
/* { dg-options "-O2 -fpie" } */
|
|
||||||
/* { dg-final { scan-assembler "addl\[ \\t\]+\[$\]_GLOBAL_OFFSET_TABLE_, %ebx" } } */
|
|
||||||
-/* { dg-final { scan-assembler "movl\[ \\t\]+c@GOTOFF\[(\]%ebx\[)\]" } } */
|
|
||||||
+/* { dg-final { scan-assembler "movl\[ \\t\]+c@GOT\[(\]%ebx\[)\]" } } */
|
|
||||||
/* { dg-final { scan-assembler-not "movl\[ \\t\]+\[0-9]+\[(\]%esp\[)\], %ebx" } } */
|
|
||||||
long c;
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
|||||||
2015-02-16 Jakub Jelinek <jakub@redhat.com>
|
|
||||||
|
|
||||||
PR middle-end/65074
|
|
||||||
* g++.dg/opt/pr65074.C: New test.
|
|
||||||
|
|
||||||
--- gcc/testsuite/g++.dg/opt/pr65074.C.jj 2015-02-16 09:53:52.171683872 +0100
|
|
||||||
+++ gcc/testsuite/g++.dg/opt/pr65074.C 2015-02-16 09:53:24.000000000 +0100
|
|
||||||
@@ -0,0 +1,19 @@
|
|
||||||
+// PR middle-end/65074
|
|
||||||
+// { dg-do link { target pie } }
|
|
||||||
+// { dg-options "-pie -fpie -O2" }
|
|
||||||
+
|
|
||||||
+#include <fstream>
|
|
||||||
+
|
|
||||||
+using namespace std;
|
|
||||||
+
|
|
||||||
+__attribute__((noinline, noclone)) void
|
|
||||||
+foo (const char *fname)
|
|
||||||
+{
|
|
||||||
+ ifstream f (fname);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+int
|
|
||||||
+main ()
|
|
||||||
+{
|
|
||||||
+ foo ("foobar");
|
|
||||||
+}
|
|
@ -1,41 +0,0 @@
|
|||||||
2015-02-17 Jakub Jelinek <jakub@redhat.com>
|
|
||||||
|
|
||||||
PR ipa/65087
|
|
||||||
* cgraphclones.c (cgraph_node::create_virtual_clone): Only copy
|
|
||||||
section if !implicit_section.
|
|
||||||
(cgraph_node::create_version_clone_with_body): Likewise.
|
|
||||||
* trans-mem.c (ipa_tm_create_version): Likewise.
|
|
||||||
|
|
||||||
--- gcc/cgraphclones.c.jj 2015-02-16 20:16:43.000000000 +0100
|
|
||||||
+++ gcc/cgraphclones.c 2015-02-17 09:35:19.682184215 +0100
|
|
||||||
@@ -617,7 +617,7 @@ cgraph_node::create_virtual_clone (vec<c
|
|
||||||
ABI support for this. */
|
|
||||||
set_new_clone_decl_and_node_flags (new_node);
|
|
||||||
new_node->clone.tree_map = tree_map;
|
|
||||||
- if (!DECL_ONE_ONLY (old_decl))
|
|
||||||
+ if (!implicit_section)
|
|
||||||
new_node->set_section (get_section ());
|
|
||||||
|
|
||||||
/* Clones of global symbols or symbols with unique names are unique. */
|
|
||||||
@@ -1011,7 +1011,8 @@ cgraph_node::create_version_clone_with_b
|
|
||||||
new_version_node->externally_visible = 0;
|
|
||||||
new_version_node->local.local = 1;
|
|
||||||
new_version_node->lowered = true;
|
|
||||||
- new_version_node->set_section (get_section ());
|
|
||||||
+ if (!implicit_section)
|
|
||||||
+ new_version_node->set_section (get_section ());
|
|
||||||
/* Clones of global symbols or symbols with unique names are unique. */
|
|
||||||
if ((TREE_PUBLIC (old_decl)
|
|
||||||
&& !DECL_EXTERNAL (old_decl)
|
|
||||||
--- gcc/trans-mem.c.jj 2015-02-16 20:16:43.000000000 +0100
|
|
||||||
+++ gcc/trans-mem.c 2015-02-17 09:35:19.682184215 +0100
|
|
||||||
@@ -4967,7 +4967,8 @@ ipa_tm_create_version (struct cgraph_nod
|
|
||||||
new_node->externally_visible = old_node->externally_visible;
|
|
||||||
new_node->lowered = true;
|
|
||||||
new_node->tm_clone = 1;
|
|
||||||
- new_node->set_section (old_node->get_section ());
|
|
||||||
+ if (!old_node->implicit_section)
|
|
||||||
+ new_node->set_section (old_node->get_section ());
|
|
||||||
get_cg_data (&old_node, true)->clone = new_node;
|
|
||||||
|
|
||||||
if (old_node->get_availability () >= AVAIL_INTERPOSABLE)
|
|
Loading…
Reference in New Issue
Block a user