1/* { dg-do run } */
2/* { dg-options "-fsanitize=signed-integer-overflow" } */
3
4__attribute__((noinline, noclone)) int
5foo1 (int x, int y)
6{
7  return x - y;
8}
9
10__attribute__((noinline, noclone)) int
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
22int
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