[Bug debug/53470] [4.8 Regression] ICE when linking with -g in splice_child_die, at dwarf2out.c:4264

jason at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Wed Jun 6 15:27:00 GMT 2012


--- 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.

More information about the Gcc-bugs mailing list