https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118790

--- Comment #32 from rguenther at suse dot de <rguenther at suse dot de> ---
On Wed, 12 Feb 2025, jakub at gcc dot gnu.org wrote:

> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118790
> 
> --- Comment #31 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
> (In reply to rguent...@suse.de from comment #30)
> > > Note, normally these VLA addresses don't have DECL_VALUE_EXPR and so are
> > > usually used in the IL.  It is just that tree-nested.cc in this case added
> > > DECL_VALUE_EXPR on those because they are (or were) referenced from nested
> > > function.
> > 
> > I think the intent for this is to reflect this into debug info.  So,
> > ... I think tree-nested.cc should put amend the related VAR which should
> > be already somewhere in BLOCK_VARS?
> 
> Note, moving it to BLOCK_VARS is actually wrong, the VAR_DECL is
> DECL_ARTIFICIAL, but !DECL_IGNORED_P - we actually want to be able to use its
> value.
> We don't want users to see id_string.55 in the debugger and be able to ask its
> value etc.  We just want users to look at id_string which is a VLA.
> So, from dwarf2out.cc POV, we want to know where id_string lives and go there
> through
> the the DECL_VALUE_EXPRs
>   character(kind=1) id_string[1:.id_string] [value-expr: *id_string.55];
>   character(kind=1)[1:.id_string] * id_string.55 [value-expr:
> FRAME.107.id_string.55];
>   integer(kind=8) .id_string [value-expr: FRAME.107..id_string];
> to actual RTL and DWARF expressions for that.
> So, conceptually I think we want to keep current behavior but ensure that
> chains of DECL_VALUE_EXPRs still work after GC.
> One way to achieve that could be some special GTY extension which does the 2
> pass swipes over the hash_map rather than one pass (could say GTY((user)) deal
> with that?).
> And another possibility would be to "inline" the DECL_VALUE_EXPR subtrees, 
> when
> we note that id_string DECL_VALUE_EXPR refers to id_string.55 which is not in
> any BLOCK_VARS and has DECL_VALUE_EXPR, simply take its DECL_VALUE_EXPR and
> replace id_string.55 with that in DECL_VALUE_EXPR of id_string, etc.

Hmm, so CFG expand pruning all local_decls interferes with GC then.  Can
we avoid pruning it completely?  Two-stage handling of cache hash tables
would work and is probably a safe fix, but then it also feels somewhat
expensive (IMO with checking we should assert we're _not_ getting any
unmarked entries marked with this approach).

Inlining DECL_VALUE_EXPR is an interesting idea, but it feels like
unchartered territory at this point.

Reply via email to