https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93896
--- Comment #1 from Marc Glisse <glisse at gcc dot gnu.org> --- Without the constructor, we get plain *this_2(D).a = {}; which is expanded as an __int128 store. With the constructor, we get MEM[(struct M *)this_2(D)].p = 0B; MEM[(struct M *)this_2(D)].sz = 0; MEM[(struct M *)this_2(D)].cz = 0; and store merging turns it into MEM[(struct M *)this_2(D)].p = 0B; MEM <unsigned long> [(unsigned int *)this_2(D) + 8B] = 0; but no further.