https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103040
Jan Hubicka <hubicka at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Ever confirmed|0 |1 Last reconfirmed| |2021-11-02 Status|UNCONFIRMED |NEW --- Comment #11 from Jan Hubicka <hubicka at gcc dot gnu.org> --- Sorry for the breakage. Looking at Jakub's comment: SR.11_24 = 0; _12 = SR.11_24; MEM <uint128_t> [(unsigned char * {ref-all})&nrvo] = _12; nrvo = nrvo101273 (); [return slot optimization] instead of C++ nrvo = nrvo101273 (); [return slot optimization] I think this may be the problem - we represent the call as full write and thus we do not expect MEM <uint128_t> [(unsigned char * {ref-all})&nrvo] = _12; to survive. We also do not expect the return slot argument to be read from - it should be write only and the write should correspond to the size of structure being initialized. Things might have been working before simply because we made nrvo to escape and this is flow insensitive and therefore we believed that nrvo101273 may need the value.