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