https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108772
--- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Richard Biener from comment #6) > (In reply to Richard Biener from comment #5) > > another possibility would be to stream "no DIE" info for not late > > created decls > > like by setting DECL_IGNORED_P on them? Like maybe with the following > which also fixes the issue: > > diff --git a/gcc/lto-streamer-in.cc b/gcc/lto-streamer-in.cc > index 03cb41cfa16..f91e51b9327 100644 > --- a/gcc/lto-streamer-in.cc > +++ b/gcc/lto-streamer-in.cc > @@ -1739,6 +1739,10 @@ lto_read_tree_1 (class lto_input_block *ib, class > data_in *data_in, tree expr) > dref_entry e = { expr, str, off }; > dref_queue.safe_push (e); > } > + else if (DECL_P (expr)) > + /* Avoid creating a full DIE late for a decl that didn't have > + it created early. */ > + DECL_IGNORED_P (expr) = 1; > } > } Even using else if (DECL_P (expr) && ! DECL_ABSTRACT_ORIGIN (expr) && ! (TARGET_PECOFF || TARGET_COFF)) gets us quite some guality regressions. The original proposed change feels wrong though.