Merge from mainline (167278:168000).
[official-gcc/graphite-test-results.git] / gcc / testsuite / gcc.dg / pr38364.c
blob23f72de74ee41cf07bc2be681e841967f87af2b6
1 /* PR middle-end/38364 */
2 /* { dg-do run } */
3 /* { dg-options "-O2 -ftrapv" } */
5 extern void abort (void);
7 static inline short
8 f1 (short x, short y)
10 if (x > 0)
12 if (y > 0)
14 if (x > __SHRT_MAX__ / y)
15 return x;
17 else if (y < (-__SHRT_MAX__ - 1) / x)
18 return x;
20 else
22 if (y > 0)
24 if (x < (-__SHRT_MAX__ - 1) / y)
25 return x;
27 else if (x != 0 && y < __SHRT_MAX__ / x)
28 return x;
30 return x * y;
33 static inline signed char
34 f2 (signed char x, signed char y)
36 if (((x ^ y) & (((x ^ ((x ^ y) & (1 << (__CHAR_BIT__ - 1)))) - y) ^ y)) < 0)
37 return x;
38 return x - y;
41 unsigned int v;
43 int
44 f3 (int x, unsigned int y)
46 f1 (1, 1);
47 return 1;
50 int
51 f4 (unsigned short x)
53 v = x;
54 return 1;
57 int
58 f5 (int x)
60 if (f2 (x, 1))
61 f1 (1, f4 (1));
62 return x;
65 int
66 f6 (unsigned int x)
68 f4 (x < (1 != f5 (0)));
69 return x;
72 int
73 main (void)
75 f6 (1);
76 if (v != 0)
77 abort ();
78 return 0;