https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114425
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Strangely it is dependent on the printf loop, without that it works fine. Slightly adjusted testcase: #if __BITINT_MAXWIDTH__ >= 2000 _BitInt(8) a; _BitInt(300) b; _BitInt(2000) c; unsigned foo (_BitInt(2000) d) { int o = __builtin_add_overflow_p (d, 0, b); _BitInt(2000) m = c * a; unsigned u = m; return u + o; } __attribute__((noipa)) void bar (int x) { (void) x; } #endif int main () { #if __BITINT_MAXWIDTH__ >= 2000 unsigned x = foo (0xfa7ac16f2613255eeb217e871c1f02221e26ce11f82d6a33206ec0ad5d4414722019933c0e2wb); for (unsigned i = 0; i < sizeof (x); i++) bar (((volatile unsigned char *) &x)[i]); if (x != 1) __builtin_abort (); #endif }