http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53470
--- Comment #9 from Jason Merrill <jason at gcc dot gnu.org> 2012-06-06 15:27:02 UTC --- (In reply to comment #8) > All of the clearing is done to push down memory usage and/or cause > types to be referenced that are otherwise unused. A way to retain the > latter would be to not recurse into TYPE_CONTEXT during find_decls_types_r > and in free_lang_data_in_type only reset TYPE_CONTEXT when > that is not in fld.pset (thus we didn't visit it, aka, it is unused). If a type is nested inside another type, using the inner type necessarily uses the outer type; we need to at least declare the outer type so we have some place to put the inner type. So I don't think there's any optimization opportunity here. > Note that the fundamental issue with running free-lang-data with -g0 > and lto1 with -g is that free-lang-data with -g0 assumes we won't > generate debug information. Yes, but that isn't the problem with this PR; in this case cc1plus and lto1 are both run with -g. free_lang_data_in_type is clearing TYPE_CONTEXT even though we want full debug information, and this lying to the debugging back end results in the ICE.