https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114074
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Adjusted testcase, -O0 works, -O1/-O2 aborts. int a, b, d; __attribute__((noipa)) void foo (void) { ++d; } int main () { for (a = 0; a > -3; a -= 2) { int c = a; b = __INT_MAX__ - 3000; a = ~c * b; foo (); if (!a) break; a = c; } if (d != 2) __builtin_abort (); }