| // { dg-do run } |
| // { dg-require-effective-target lp64 } |
| // { dg-options "-O2 -fwrapv" } |
| |
| typedef long long int int64; |
| #define INT64CONST(x) (x##LL) |
| /* -9223372036854775808ULL */ |
| #define INT64_MIN (-INT64CONST(0x7FFFFFFFFFFFFFFF) - 1) |
| |
| static void __attribute__((noipa)) foo(int64 arg1, int64 arg2) { |
| int64 a1 = -arg1; |
| int64 a2 = (arg2 < 0) ? arg2 : -arg2; |
| |
| if (a1 > a2) { |
| int64 swap = arg1; |
| arg1 = arg2; |
| arg2 = swap; |
| } |
| |
| if (arg1 == INT64_MIN && arg2 == -1) return; |
| |
| __builtin_abort(); |
| } |
| |
| int main() { |
| foo(-1, INT64_MIN); |
| return 0; |
| } |