https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97073
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Shorter testcase: typedef unsigned long long L; union U { L i; struct T { unsigned k; L l; } j; } u; __attribute__((noinline,noclone)) void foo (L x) { u.j.l = u.i & x; } int main () { u.i = 5; foo (-1ULL); if (u.j.l != 5) __builtin_abort (); return 0; } This broke in between r102000 (still good) and r104000 (already miscompiled), so I don't believe that 6.3.1 worked.