1 /* { dg-do run } */ 2 /* { dg-options "-fsanitize=signed-integer-overflow" } */ 3 4 __attribute__((noinline, noclone)) int foo1(int x,int y)5foo1 (int x, int y) 6 { 7 return x - y; 8 } 9 10 __attribute__((noinline, noclone)) int foo2(int x,int y)11foo2 (int x, int y) 12 { 13 unsigned int xa = (unsigned int) x - (__INT_MAX__ - 3); 14 xa &= 3; 15 x = __INT_MAX__ - 3 + xa; 16 unsigned int ya = y + 1U; 17 ya &= 1; 18 y = ya - 1; 19 return x - y; 20 } 21 22 int main()23main () 24 { 25 int xm1, y; 26 for (xm1 = __INT_MAX__ - 4; xm1 < __INT_MAX__; xm1++) 27 for (y = -1; y <= 0; y++) 28 if (foo1 (xm1 + 1, y) != (int) (xm1 + 1U - y) 29 || foo2 (xm1 + 1, y) != (int) (xm1 + 1U - y)) 30 __builtin_abort (); 31 return 0; 32 } 33 /* { dg-output ":7:\[0-9]\[^\n\r]*signed integer overflow: 2147483647 - -1 cannot be represented in type 'int'\[^\n\r]*(\n|\r\n|\r)" } */ 34 /* { dg-output "\[^\n\r]*:19:\[0-9]\[^\n\r]*signed integer overflow: 2147483647 - -1 cannot be represented in type 'int'" } */ 35