aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2015-02-19 07:14:24 -0800
committerRichard Henderson <rth@gcc.gnu.org>2015-02-19 07:14:24 -0800
commit0ff5fade6a3eecd0590b050ec4bb4288a0ddf907 (patch)
treeb58d8a7bbe776f6bbe0c1db3794c30e56b0ff573
parent97953c118b29aea7df7428da0da926e79167fbec (diff)
downloadgcc-0ff5fade6a3eecd0590b050ec4bb4288a0ddf907.zip
gcc-0ff5fade6a3eecd0590b050ec4bb4288a0ddf907.tar.gz
gcc-0ff5fade6a3eecd0590b050ec4bb4288a0ddf907.tar.bz2
re PR middle-end/65074 (r220674 broke C++ PIEs)
PR middle-end/65074 * varasm.c (default_binds_local_p_2): Don't test node->definition; test DECL_EXTERNAL independent of symtab_node. From-SVN: r220816
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/varasm.c12
2 files changed, 11 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a304558..ac52a2c 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2015-02-19 Richard Henderson <rth@redhat.com>
+
+ PR middle-end/65074
+ * varasm.c (default_binds_local_p_2): Don't test node->definition;
+ test DECL_EXTERNAL independent of symtab_node.
+
2015-02-19 Jakub Jelinek <jakub@redhat.com>
PR lto/65012
diff --git a/gcc/varasm.c b/gcc/varasm.c
index dc7cfd7..8173207 100644
--- a/gcc/varasm.c
+++ b/gcc/varasm.c
@@ -6828,20 +6828,18 @@ default_binds_local_p_2 (const_tree exp, bool shlib, bool weak_dominate)
because dynamic linking might overwrite symbols
in shared libraries. */
bool resolved_locally = false;
- bool defined_locally = false;
+ bool defined_locally = !DECL_EXTERNAL (exp);
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 (node->in_other_partition)
+ defined_locally = true;
if (resolution_to_local_definition_p (node->resolution))
defined_locally = resolved_locally = true;
else if (resolution_local_p (node->resolution))
resolved_locally = true;
}
+ if (defined_locally && weak_dominate && !shlib)
+ resolved_locally = true;
/* Undefined weak symbols are never defined locally. */
if (DECL_WEAK (exp) && !defined_locally)