1/* { dg-do run } */
2/* { dg-options "-fsanitize=signed-integer-overflow -Wno-unused-variable" } */
3
4#define INT_MAX __INT_MAX__
5#define INT_MIN (-__INT_MAX__ - 1)
6#define LONG_MAX __LONG_MAX__
7#define LONG_MIN (-__LONG_MAX__ - 1L)
8#define LLONG_MAX __LONG_LONG_MAX__
9#define LLONG_MIN (-__LONG_LONG_MAX__ - 1L)
10
11int
12main (void)
13{
14  volatile int j = INT_MIN;
15  volatile int i = 1;
16  volatile int k = j - i;
17  j--;
18  j = INT_MIN + 100;
19  j -= (1 << 10);
20
21  j = INT_MIN;
22  i = -1;
23  k = j - -i;
24
25  i = INT_MIN + 1000;
26  i -= (1 << 20);
27
28  volatile long int l = LONG_MIN;
29  volatile long int m = 1;
30  volatile long int n = l - m;
31  l--;
32  l = LONG_MIN + 100;
33  l -= (1 << 10);
34
35  l = LONG_MIN;
36  m = -1;
37  n = l - -m;
38
39  m = LONG_MIN + 1000;
40  m -= (1 << 20);
41
42  return 0;
43}
44
45/* { dg-output "signed integer overflow: -2147483648 - 1 cannot be represented in type 'int'\[^\n\r]*(\n|\r\n|\r)" } */
46/* { dg-output "\[^\n\r]*signed integer overflow: -2147483648 - 1 cannot be represented in type 'int'\[^\n\r]*(\n|\r\n|\r)" } */
47/* { dg-output "\[^\n\r]*signed integer overflow: -2147483548 - 1024 cannot be represented in type 'int'\[^\n\r]*(\n|\r\n|\r)" } */
48/* { dg-output "\[^\n\r]*signed integer overflow: -2147483648 - 1 cannot be represented in type 'int'\[^\n\r]*(\n|\r\n|\r)" } */
49/* { dg-output "\[^\n\r]*signed integer overflow: -2147482648 - 1048576 cannot be represented in type 'int'\[^\n\r]*(\n|\r\n|\r)" } */
50/* { dg-output "\[^\n\r]*signed integer overflow: -\[^\n\r]* - 1 cannot be represented in type 'long int'\[^\n\r]*(\n|\r\n|\r)" } */
51/* { dg-output "\[^\n\r]*signed integer overflow: -\[^\n\r]* - 1 cannot be represented in type 'long int'\[^\n\r]*(\n|\r\n|\r)" } */
52/* { dg-output "\[^\n\r]*signed integer overflow: -\[^\n\r]* - 1024 cannot be represented in type 'long int'\[^\n\r]*(\n|\r\n|\r)" } */
53/* { dg-output "\[^\n\r]*signed integer overflow: -\[^\n\r]* - 1 cannot be represented in type 'long int'\[^\n\r]*(\n|\r\n|\r)" } */
54/* { dg-output "\[^\n\r]*signed integer overflow: -\[^\n\r]* - 1048576 cannot be represented in type 'long int'\[^\n\r]*" } */
55