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.

Reply via email to