http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51650
--- Comment #20 from Markus Trippelsdorf <markus at trippelsdorf dot de> 2011-12-23 13:56:55 UTC --- (In reply to comment #19) > 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 ;) Fortunately it seems that this bug was the last issue that needed to be fixed. Firefox now builds fine with -lto and -g.