https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125222
Drea Pinski <pinskia at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Last reconfirmed| |2026-05-08
Ever confirmed|0 |1
Status|UNCONFIRMED |NEW
--- Comment #1 from Drea Pinski <pinskia at gcc dot gnu.org> ---
value_->~O();
G restore([p = value_] { });
::new (value_) O{u, true};
This works:
```
O *v = value_;
assert(!v->flag);
v->~O();
G restore([p = v] { });
::new (v) O{u, true};
restore.should_execute_ = false;
```
for f. As we can see v is always &x.
What seems to be happening is we mark x as ending at `value_->~O();` which is
correct, and then for the inplacement new produces:
MEM[(struct O *)_13] ={v} {CLOBBER(bob)};
Which is correct but that in the end does not make x as beinging (again).