aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael Avila de Espindola <espindola@google.com>2009-11-17 16:49:22 +0000
committerRafael Espindola <espindola@gcc.gnu.org>2009-11-17 16:49:22 +0000
commita5ac2cdf941a5b48a05bda9eba942706c33079a8 (patch)
tree8b4e66e4e052ec0cc610772abc8c6471d7a7d7f1
parent5456cefc68db903dcb308729a3d68f619c703660 (diff)
downloadgcc-a5ac2cdf941a5b48a05bda9eba942706c33079a8.zip
gcc-a5ac2cdf941a5b48a05bda9eba942706c33079a8.tar.gz
gcc-a5ac2cdf941a5b48a05bda9eba942706c33079a8.tar.bz2
lto-symtab.c (lto_symtab_resolve_symbols): Always initialize the nodes.
2009-11-17 Rafael Avila de Espindola <espindola@google.com> * lto-symtab.c (lto_symtab_resolve_symbols): Always initialize the nodes. From-SVN: r154258
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/lto-symtab.c18
2 files changed, 17 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 7ca1972..25080b2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2009-11-17 Rafael Avila de Espindola <espindola@google.com>
+
+ * lto-symtab.c (lto_symtab_resolve_symbols): Always initialize the
+ nodes.
+
2009-11-17 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
PR tree-optimization/41857
diff --git a/gcc/lto-symtab.c b/gcc/lto-symtab.c
index 642b623..5f98a35 100644
--- a/gcc/lto-symtab.c
+++ b/gcc/lto-symtab.c
@@ -376,20 +376,26 @@ lto_symtab_resolve_can_prevail_p (lto_symtab_entry_t e)
static void
lto_symtab_resolve_symbols (void **slot)
{
- lto_symtab_entry_t e = (lto_symtab_entry_t) *slot;
+ lto_symtab_entry_t e;
lto_symtab_entry_t prevailing = NULL;
- /* If the chain is already resolved there is nothing to do. */
+ /* Always set e->node so that edges are updated to reflect decl merging. */
+ for (e = (lto_symtab_entry_t) *slot; e; e = e->next)
+ {
+ if (TREE_CODE (e->decl) == FUNCTION_DECL)
+ e->node = cgraph_get_node (e->decl);
+ }
+
+ e = (lto_symtab_entry_t) *slot;
+
+ /* If the chain is already resolved there is nothing else to do. */
if (e->resolution != LDPR_UNKNOWN)
return;
/* Find the single non-replaceable prevailing symbol and
diagnose ODR violations. */
- for (; e; e = e->next)
+ for (e = (lto_symtab_entry_t) *slot; e; e = e->next)
{
- if (TREE_CODE (e->decl) == FUNCTION_DECL)
- e->node = cgraph_get_node (e->decl);
-
if (!lto_symtab_resolve_can_prevail_p (e))
{
e->resolution = LDPR_RESOLVED_IR;