This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug lto/44966] weak aliases LTO with gold causes ICE in lto_symtab_merge_decls_1
- From: "hubicka at ucw dot cz" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 19 Jul 2010 23:50:47 -0000
- Subject: [Bug lto/44966] weak aliases LTO with gold causes ICE in lto_symtab_merge_decls_1
- References: <bug-44966-7834@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #6 from hubicka at ucw dot cz 2010-07-19 23:50 -------
Subject: Re: weak aliases LTO with gold causes ICE in
lto_symtab_merge_decls_1
Hi,
try this one
Index: lto-symtab.c
===================================================================
--- lto-symtab.c (revision 162310)
+++ lto-symtab.c (working copy)
@@ -783,9 +783,25 @@ lto_symtab_merge_cgraph_nodes_1 (void **
for (e = prevailing->next; e; e = e->next)
{
if (e->node != NULL)
- lto_cgraph_replace_node (e->node, prevailing->node);
+ {
+ if (!prevailing->node)
+ {
+ gcc_assert (!e->node->analyzed);
+ prevailing->node = cgraph_node (prevailing->decl);
+ prevailing->node->alias = true;
+ }
+ lto_cgraph_replace_node (e->node, prevailing->node);
+ }
if (e->vnode != NULL)
- lto_varpool_replace_node (e->vnode, prevailing->vnode);
+ {
+ if (!prevailing->vnode)
+ {
+ gcc_assert (!e->vnode->finalized);
+ prevailing->vnode = varpool_node (prevailing->decl);
+ prevailing->vnode->alias = true;
+ }
+ lto_varpool_replace_node (e->vnode, prevailing->vnode);
+ }
}
/* Drop all but the prevailing decl from the symtab. */
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44966