https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61982
hyrosen at mail dot com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |hyrosen at mail dot com --- Comment #9 from hyrosen at mail dot com --- The storage for an object can still be accessible after the object is destroyed. Therefore, writes in the destructor should not be eliminated unless they are provably inaccessible: struct X { int i; ~X() { i = 0; } }; void destroy(X &x) { x.~X(); } int main() { alignas(X) char buf[sizeof(X)], save[sizeof(X)]; X *x = new (buf) X; x->i = 1; memcpy(save, buf, sizeof(X)); destroy(*x); assert(memcmp(buf, save, sizeof(X)) != 0); }