diff options
author | Rafael Avila de Espindola <espindola@google.com> | 2009-11-17 16:49:22 +0000 |
---|---|---|
committer | Rafael Espindola <espindola@gcc.gnu.org> | 2009-11-17 16:49:22 +0000 |
commit | a5ac2cdf941a5b48a05bda9eba942706c33079a8 (patch) | |
tree | 8b4e66e4e052ec0cc610772abc8c6471d7a7d7f1 | |
parent | 5456cefc68db903dcb308729a3d68f619c703660 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/lto-symtab.c | 18 |
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; |