/* PR middle-end/91450 */ __attribute__((noipa)) void foo (int a, int b) { unsigned long long r; if (__builtin_mul_overflow (a, b, &r)) __builtin_abort (); if (r != 0) __builtin_abort (); } __attribute__((noipa)) void bar (int a, int b) { unsigned long long r; if (a >= 0) return; if (__builtin_mul_overflow (a, b, &r)) __builtin_abort (); if (r != 0) __builtin_abort (); } __attribute__((noipa)) void baz (int a, int b) { unsigned long long r; if (b >= 0) return; if (__builtin_mul_overflow (a, b, &r)) __builtin_abort (); if (r != 0) __builtin_abort (); } __attribute__((noipa)) void qux (int a, int b) { unsigned long long r; if (a >= 0) return; if (b < 0) return; if (__builtin_mul_overflow (a, b, &r)) __builtin_abort (); if (r != 0) __builtin_abort (); } __attribute__((noipa)) void quux (int a, int b) { unsigned long long r; if (a < 0) return; if (b >= 0) return; if (__builtin_mul_overflow (a, b, &r)) __builtin_abort (); if (r != 0) __builtin_abort (); } int main () { foo (-4, 0); foo (0, -4); foo (0, 0); bar (-4, 0); baz (0, -4); qux (-4, 0); quux (0, -4); return 0; }