[gcc] 5.0.0-0.14
Jakub Jelinek
jakub at fedoraproject.org
Mon Feb 16 09:55:38 UTC 2015
commit 6d4716823e401bbb13a3bcff16432eb77cad8cda
Author: Jakub Jelinek <jakub at redhat.com>
Date: Mon Feb 16 10:55:27 2015 +0100
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(-)
---
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 <jakub at redhat.com> 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 <jakub at redhat.com> 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 <hongjiu.lu at intel.com>
+ Richard Henderson <rth at 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,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 at GOTOFF\[(\]%ebx\[)\]" } } */
++/* { dg-final { scan-assembler "movl\[ \\t\]+c at 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 <jakub at 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");
++}
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
More information about the scm-commits
mailing list