https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97464
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Ever confirmed|0 |1 Status|UNCONFIRMED |NEW CC| |rguenth at gcc dot gnu.org Component|c++ |tree-optimization Keywords| |alias, missed-optimization Last reconfirmed| |2020-10-19 --- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> --- In GCCs memory model x and y can still point to the same memory, the only thing that hints at this not being the case is the load from x at the --x; statement but we're eliminating this load (using TBAA) with the store from the ++x statement which means we get to see (at the store elimination phase) int tem = x; y = 1; x = tem; and here the store to x is necessary because x and y may now point to the same storage, each ending lifetime of the int/float object eventually live previously at the location. So yes, before eliminating dead code after eliminating redundancies we could have seen the store is not necessary (actually we still don't use the present load to do so). So, it's a difficult one. And I believe we have a duplicate report somewhere.