https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93402
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org Target Milestone|--- |8.4 --- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Seems to have started with r186861 aka r0-116443-gb5068425b9d7ab59694014bc78d4a29e04e44918. Slightly adjusted testcase: struct S { unsigned int a; unsigned long long b; }; __attribute__((noinline)) struct S foo (unsigned long long x) { struct S ret; ret.a = 0; ret.b = x * 11111111111ULL + 111111111111ULL; return ret; } int main () { struct S a = foo (1); if (a.b != 122222222222ULL) __builtin_abort (); return 0; } The difference between per-r186861 and r186861 (== trunk) is: @@ -10,7 +10,6 @@ foo: movabsq $111111111111, %rdx imulq %rax, %rdi xorl %eax, %eax - addq %rdi, %rdx ret .cfi_endproc .LFE0: