https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109109
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- If you suspect that one, that is certainly the simplest, in C that would be __attribute__((noipa)) void foo (unsigned long long *a, unsigned int b, unsigned int c) { *a = (((unsigned long long) b) << 32) | c; } int main () { unsigned long long a; foo (&a, 0xcafebabeU, 0xdeadbeefU); if (a != 0xcafebabedeadbeefULL) __builtin_abort (); } and you can see the same difference with say -O2 -m32 -fno-omit-frame-pointer. But, that one works for both...