1/* { dg-do run } */
2/* { dg-options "-fsanitize=signed-integer-overflow -Wno-unused-variable -fno-sanitize-recover=signed-integer-overflow" } */
3
4#define SCHAR_MAX __SCHAR_MAX__
5#define SHRT_MAX __SHRT_MAX__
6#define INT_MAX __INT_MAX__
7#define INT_MIN (-__INT_MAX__ - 1)
8
9void __attribute__((noinline,noclone))
10check (int i, int j)
11{
12  if (i != j)
13    __builtin_abort ();
14}
15
16int
17main (void)
18{
19  /* Test integer promotion.  */
20#if __SCHAR_MAX__ == 127
21  volatile signed char a = -2;
22  volatile signed char b = SCHAR_MAX;
23  volatile signed char c = a * b;
24  check (c, 2);
25#endif
26
27#if __SHRT_MAX__ == 32767
28  volatile short d = SHRT_MAX;
29  volatile short e = 2;
30  volatile short f = d * e;
31  check (f, -2);
32#endif
33
34#if __INT_MAX__ == 2147483647
35  volatile int m = INT_MAX;
36  volatile int n = 1;
37  volatile int o = m * n;
38  check (o, INT_MAX);
39
40  m = INT_MIN;
41  o = m * n;
42  check (o, INT_MIN);
43#endif
44  return 0;
45}
46