http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51650

--- Comment #19 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-12-23 
11:51:41 UTC ---
A workaround for ICEs of this form is

Index: gcc/dwarf2out.c
===================================================================
--- gcc/dwarf2out.c     (revision 182652)
+++ gcc/dwarf2out.c     (working copy)
@@ -22496,15 +22496,23 @@ dwarf2out_finish (const char *filename)
              else if (TYPE_P (node->created_for))
                context = TYPE_CONTEXT (node->created_for);

-             gcc_assert (context
-                         && (TREE_CODE (context) == FUNCTION_DECL
-                             || TREE_CODE (context) == NAMESPACE_DECL));
+             if (!(context
+                   && (TREE_CODE (context) == FUNCTION_DECL
+                       || TREE_CODE (context) == NAMESPACE_DECL)))
+               {
+                 if (!in_lto_p)
+                   gcc_unreachable ();

-             origin = lookup_decl_die (context);
-             if (origin)
-               add_child_die (origin, die);
+                 add_child_die (comp_unit_die (), die);
+               }
              else
-               add_child_die (comp_unit_die (), die);
+               {
+                 origin = lookup_decl_die (context);
+                 if (origin)
+                   add_child_die (origin, die);
+                 else
+                   add_child_die (comp_unit_die (), die);
+               }
            }
        }
     }

just in case you want to look further ;)

Reply via email to