https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120310
Bug ID: 120310 Summary: Missing location for initially addressable variable Product: gcc Version: 15.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: debug Assignee: unassigned at gcc dot gnu.org Reporter: jakub at gcc dot gnu.org Target Milestone: --- Consider -O2 -g -dA volatile int v; void foo () { int a = 42; int *b = &a; ++v; } struct S { int *p; int q; }; void bar () { int a = 42; ++a; struct S b = { &a, -42 }; int *c = &a; --v; } In foo, ssa pass adds debug for b: b_5 = &a; # DEBUG b => b_5 and ccp1 rewrites a into ssa: a_8 = 42; # DEBUG a => a_8 # DEBUG b => &a But in bar, esra adds debug stmts for the b parts: # DEBUG b$p => &a b.p = &a; # DEBUG b$q => -42 b.q = -42; and mergephi still has a = 42; (still addressable, because there is b.p = &a; ) and then dse1 comes and just deletes the store without adding any debug stmts, so unlike the foo case we loose the info that on --v a has value 43 and *b.p has also value 43.