[Bug debug/120310] Missing location for initially addressable variable

2025-05-17 Thread rguenth at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120310

--- Comment #3 from Richard Biener  ---
(In reply to Jakub Jelinek from comment #2)
> Guess one case is when tree DSE removes all stores to some automatic
> addressable variable, in that case it would be nice to populate debug stmts
> to all those removed locs and state what values it had there.
> Another case is where DSE keeps some stores to it and removes others.
> If it removes the last store before the var goes out of scope, perhaps
> adding debug stmt for that is fine too, but not sure what to do in case it
> removes a store because it is overwritten by a later store, say
> void qux (int *);
> void
> baz (void)
> {
>   int a = 42;
>   a = 43;
>   qux (&a);
> }
> Because there dse1 does
># DEBUG BEGIN_STMT
> -  a = 42;
># DEBUG BEGIN_STMT
>a = 43;
> and if we add   # DEBUG a => 42 we'd need to add some debug stmt to say from
> this point on, value of a is in the a variable.  Not sure if # DEBUG a => a
> would do it or if we'd need something else.

Since 'a' is still in memory we do not need any # DEBUG stmts for 'a', only
when there's a time where 'a' does not reflect the value in the abstract
machine - like for example when applying loop store motion, then inside
the loop we'd technically need debug stmts.  Of course I have no idea
how that will work in the end on the consumer side.

So for the original DSE issue:

 a = 1;  <-- DSEd
...
 a = 2;  <-- kept

# DEBUG a = 1
...
  a = 2;

do we correctly track stores to 'a' here and get correct location lists?

IIRC the patched from Richard S. simply kept the stores?

[Bug debug/120310] Missing location for initially addressable variable

2025-05-16 Thread jakub at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120310

--- Comment #2 from Jakub Jelinek  ---
Guess one case is when tree DSE removes all stores to some automatic
addressable variable, in that case it would be nice to populate debug stmts to
all those removed locs and state what values it had there.
Another case is where DSE keeps some stores to it and removes others.
If it removes the last store before the var goes out of scope, perhaps adding
debug stmt for that is fine too, but not sure what to do in case it removes a
store because it is overwritten by a later store, say
void qux (int *);
void
baz (void)
{
  int a = 42;
  a = 43;
  qux (&a);
}
Because there dse1 does
   # DEBUG BEGIN_STMT
-  a = 42;
   # DEBUG BEGIN_STMT
   a = 43;
and if we add   # DEBUG a => 42 we'd need to add some debug stmt to say from
this point on, value of a is in the a variable.  Not sure if # DEBUG a => a
would do it or if we'd need something else.

[Bug debug/120310] Missing location for initially addressable variable

2025-05-16 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120310

Andrew Pinski  changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
   Keywords||wrong-debug
 CC||pinskia at gcc dot gnu.org
   Last reconfirmed||2025-05-16
 Ever confirmed|0   |1

--- Comment #1 from Andrew Pinski  ---
Confirmed. THere might be another report of this too.