| /* { dg-do run } */ |
| /* { dg-options "-fsanitize=signed-integer-overflow" } */ |
| |
| __attribute__((noinline, noclone)) int |
| foo1 (int x, int y) |
| { |
| return x - y; |
| } |
| |
| __attribute__((noinline, noclone)) int |
| foo2 (int x, int y) |
| { |
| unsigned int xa = (unsigned int) x - (__INT_MAX__ - 3); |
| xa &= 3; |
| x = __INT_MAX__ - 3 + xa; |
| unsigned int ya = y + 1U; |
| ya &= 1; |
| y = ya - 1; |
| return x - y; |
| } |
| |
| int |
| main () |
| { |
| int xm1, y; |
| for (xm1 = __INT_MAX__ - 4; xm1 < __INT_MAX__; xm1++) |
| for (y = -1; y <= 0; y++) |
| if (foo1 (xm1 + 1, y) != (int) (xm1 + 1U - y) |
| || foo2 (xm1 + 1, y) != (int) (xm1 + 1U - y)) |
| __builtin_abort (); |
| return 0; |
| } |
| /* { dg-output ":7:\[0-9]\[^\n\r]*signed integer overflow: 2147483647 - -1 cannot be represented in type 'int'\[^\n\r]*(\n|\r\n|\r)" } */ |
| /* { dg-output "\[^\n\r]*:19:\[0-9]\[^\n\r]*signed integer overflow: 2147483647 - -1 cannot be represented in type 'int'" } */ |