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