OSDN Git Service

2009-11-17 Rafael Avila de Espindola <espindola@google.com>
authorespindola <espindola@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 17 Nov 2009 16:49:22 +0000 (16:49 +0000)
committerespindola <espindola@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 17 Nov 2009 16:49:22 +0000 (16:49 +0000)
* lto-symtab.c (lto_symtab_resolve_symbols): Always initialize the
nodes.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@154258 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/lto-symtab.c

index 7ca1972..25080b2 100644 (file)
@@ -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
index 642b623..5f98a35 100644 (file)
@@ -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;