This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug lto/44966] weak aliases LTO with gold causes ICE in lto_symtab_merge_decls_1



------- 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]