https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71258
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Severity|normal |enhancement --- Comment #4 from Andrew Pinski <pinskia at gcc dot gnu.org> --- _5 = operator new (16); MEM[(struct __as_base &)_5] ={v} {CLOBBER(bob)}; MEM[(struct model *)_5].D.38294._vptr.concept = &MEM <int (*) ()[5]> [(void *)&_ZTVN4poly5modelIiEE + 16B]; MEM[(struct model *)_5]._data = 40; _6 = operator new (16); <bb 3> [local count: 1073741824]: MEM[(struct __as_base &)_6] ={v} {CLOBBER(bob)}; MEM[(struct model *)_6].D.41483._vptr.concept = &MEM <int (*) ()[5]> [(void *)&_ZTVN4poly5modelIfEE + 16B]; MEM[(struct model *)_6]._data = 2.0e+0; _7 = MEM[(struct concept *)_5]._vptr.concept; Basically the second `operator new` is treated as being able to touch the pointer that is returned the first `operator new`.