From 6d4716823e401bbb13a3bcff16432eb77cad8cda Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Mon, 16 Feb 2015 10:55:27 +0100 Subject: [PATCH] 5.0.0-0.14 --- .gitignore | 1 + gcc.spec | 17 ++- gcc5-pr32219-revert.patch | 268 ++++++++++++++++++++++++++++++++++++++ gcc5-pr65074-test.patch | 27 ++++ sources | 2 +- 5 files changed, 311 insertions(+), 4 deletions(-) create mode 100644 gcc5-pr32219-revert.patch create mode 100644 gcc5-pr65074-test.patch diff --git a/.gitignore b/.gitignore index 1a0c1c2..20c81df 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ /gcc-5.0.0-20150210.tar.bz2 /gcc-5.0.0-20150212.tar.bz2 /gcc-5.0.0-20150214.tar.bz2 +/gcc-5.0.0-20150216.tar.bz2 diff --git a/gcc.spec b/gcc.spec index ec1c88a..d38091a 100644 --- a/gcc.spec +++ b/gcc.spec @@ -1,9 +1,9 @@ -%global DATE 20150214 -%global SVNREV 220707 +%global DATE 20150216 +%global SVNREV 220728 %global gcc_version 5.0.0 # Note, gcc_release must be integer, if you want to add suffixes to # %{release}, append them after %{gcc_release} on Release: line. -%global gcc_release 0.13 +%global gcc_release 0.14 %global _unpackaged_files_terminate_build 0 %global _performance_build 1 %global multilib_64_archs sparc64 ppc64 ppc64p7 s390x x86_64 @@ -198,6 +198,10 @@ Patch11: gcc5-no-add-needed.patch Patch12: gcc5-libgo-p224.patch Patch13: gcc5-aarch64-async-unw-tables.patch Patch14: gcc5-libsanitize-aarch64-va42.patch +Patch15: gcc5-pr32219-revert.patch +Patch16: gcc5-pr65074-test.patch +rm -f gcc/testsuite/gcc.target/i386/pr32219-*.c +rm -f gcc/testsuite/gcc.dg/visibility-2{2,3}.c # On ARM EABI systems, we do want -gnueabi to be part of the # target triple. @@ -747,6 +751,8 @@ package or when debugging this package. rm -f libgo/go/crypto/elliptic/p224{,_test}.go %patch13 -p0 -b .aarch64-async-unw-tables~ %patch14 -p0 -b .libsanitize-aarch64-va42~ +%patch15 -p0 -b .pr32219-revert~ +%patch16 -p0 -b .pr65074-test~ %if 0%{?_enable_debug_packages} mkdir dwz-wrapper @@ -2932,6 +2938,11 @@ fi %doc rpm.doc/changelogs/libcc1/ChangeLog* %changelog +* Mon Feb 16 2015 Jakub Jelinek 5.0.0-0.14 +- update from the trunk + - PRs c/64768, testsuite/64850 +- temporarily revert PR rtl/32219 change + * Sat Feb 14 2015 Jakub Jelinek 5.0.0-0.13 - update from the trunk - PRs bootstrap/65060, c++/60211, c++/60894, c++/64884, c++/64898, diff --git a/gcc5-pr32219-revert.patch b/gcc5-pr32219-revert.patch new file mode 100644 index 0000000..6bc37a2 --- /dev/null +++ b/gcc5-pr32219-revert.patch @@ -0,0 +1,268 @@ +Revert: +2015-02-12 H.J. Lu + Richard Henderson + + 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,96 +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 || 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; + diff --git a/gcc5-pr65074-test.patch b/gcc5-pr65074-test.patch new file mode 100644 index 0000000..ace9779 --- /dev/null +++ b/gcc5-pr65074-test.patch @@ -0,0 +1,27 @@ +2015-02-16 Jakub Jelinek + + 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 ++ ++using namespace std; ++ ++__attribute__((noinline, noclone)) void ++foo (const char *fname) ++{ ++ ifstream f (fname); ++} ++ ++int ++main () ++{ ++ foo ("foobar"); ++} diff --git a/sources b/sources index 977d81d..72dc9a2 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -2d3e929ba3486c5ef6f907098882d1b8 gcc-5.0.0-20150214.tar.bz2 +74407e65096ddfac4cc4d4615baca1fa gcc-5.0.0-20150216.tar.bz2