http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56593
--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> 2013-03-13 08:53:29 UTC --- (In reply to comment #2) > The ICE in output_die is a known issue: when LTO puts nested and parent > functions in different partitions, implicit assumptions made in dwarf2out.c > are > no longer valid and DIEs end up with no parent. We use this patch internally: > > * dwarf2out.c (fixup_limbo_list): New function extracted from... > In LTO mode, iterate until the list is fully drained. > (dwarf2out_finish): ...here. Call it both after regular processing > and after the call to resolve_addr in LTO mode. > lto/ > * lto.c (lto_register_var_decl_in_symtab): Do not change the assembler > name in LTRANS mode. > > to make -g sort of work in LTO mode. The other issue is new I think. Btw, I agree with you that restricting partitioning of nested functions would be arbitrary. As of the above - did you figure out which construct confuses dwarf2out.c? We might as well strip that confusing information during streaming (much like we do with almost all abstract origins).