PR rtl-optimization/88018
[official-gcc.git] / gcc / testsuite / c-c++-common / torture / builtin-arith-overflow.h
blobc79999ebf6ed9294f1392d79df86f9872832f697
1 #define SCHAR_MAX __SCHAR_MAX__
2 #define SCHAR_MIN (-__SCHAR_MAX__ - 1)
3 #define SHRT_MAX __SHRT_MAX__
4 #define SHRT_MIN (-__SHRT_MAX__ - 1)
5 #define INT_MAX __INT_MAX__
6 #define INT_MIN (-__INT_MAX__ - 1)
7 #define LONG_MAX __LONG_MAX__
8 #define LONG_MIN (-__LONG_MAX__ - 1)
9 #define LLONG_MAX __LONG_LONG_MAX__
10 #define LLONG_MIN (-__LONG_LONG_MAX__ - 1)
12 int v;
14 __attribute__((noinline, noclone)) void
15 bar (void)
17 v++;
20 #define T(n, t1, t2, tr, v1, v2, vr, b, o) \
21 __attribute__((noinline, noclone)) tr \
22 t##n##_1##b (t1 x, t2 y) \
23 { \
24 tr r; \
25 if (__builtin_##b##_overflow (x, y, &r)) \
26 bar (); \
27 return r; \
28 } \
30 __attribute__((noinline, noclone)) tr \
31 t##n##_2##b (t2 y) \
32 { \
33 t1 x = (v1); \
34 tr r; \
35 if (__builtin_##b##_overflow (x, y, &r)) \
36 bar (); \
37 return r; \
38 } \
40 __attribute__((noinline, noclone)) tr \
41 t##n##_3##b (t2 y) \
42 { \
43 tr r; \
44 if (__builtin_##b##_overflow ((t1) (v1), y, \
45 &r)) \
46 bar (); \
47 return r; \
48 } \
50 __attribute__((noinline, noclone)) tr \
51 t##n##_4##b (t1 x) \
52 { \
53 t2 y = (v2); \
54 tr r; \
55 if (__builtin_##b##_overflow (x, y, &r)) \
56 bar (); \
57 return r; \
58 } \
60 __attribute__((noinline, noclone)) tr \
61 t##n##_5##b (t1 x) \
62 { \
63 tr r; \
64 if (__builtin_##b##_overflow (x, (t2) (v2), \
65 &r)) \
66 bar (); \
67 return r; \
68 } \
70 __attribute__((noinline, noclone)) void \
71 t##n##b (void) \
72 { \
73 t1 x = (v1); \
74 t2 y = (v2); \
75 tr r1, r2; \
76 v = 0; \
77 if (t##n##_1##b (x, y) != (tr) (vr) \
78 || t##n##_2##b (y) != (tr) (vr) \
79 || t##n##_3##b (y) != (tr) (vr) \
80 || t##n##_4##b (x) != (tr) (vr) \
81 || t##n##_5##b (x) != (tr) (vr)) \
82 __builtin_abort (); \
83 if (__builtin_##b##_overflow (x, y, &r1)) \
84 bar (); \
85 if (r1 != (tr) (vr)) \
86 __builtin_abort (); \
87 if (__builtin_##b##_overflow ((t1) (v1), \
88 (t2) (v2), &r2))\
89 bar (); \
90 if (r2 != (tr) (vr) || v != 7 * o) \
91 __builtin_abort (); \
93 #define TP(n, t1, t2, er, v1, v2, b, o) \
94 __attribute__((noinline, noclone)) void \
95 t##n##_1##b (t1 x, t2 y) \
96 { \
97 if (__builtin_##b##_overflow_p (x, y, er)) \
98 bar (); \
99 } \
101 __attribute__((noinline, noclone)) void \
102 t##n##_2##b (t2 y) \
104 t1 x = (v1); \
105 if (__builtin_##b##_overflow_p (x, y, er)) \
106 bar (); \
109 __attribute__((noinline, noclone)) void \
110 t##n##_3##b (t2 y) \
112 if (__builtin_##b##_overflow_p ((t1) (v1), y, \
113 er)) \
114 bar (); \
117 __attribute__((noinline, noclone)) void \
118 t##n##_4##b (t1 x) \
120 t2 y = (v2); \
121 if (__builtin_##b##_overflow_p (x, y, er)) \
122 bar (); \
125 __attribute__((noinline, noclone)) void \
126 t##n##_5##b (t1 x) \
128 if (__builtin_##b##_overflow_p (x, (t2) (v2), \
129 er)) \
130 bar (); \
133 __attribute__((noinline, noclone)) void \
134 t##n##b (void) \
136 t1 x = (v1); \
137 t2 y = (v2); \
138 v = 0; \
139 t##n##_1##b (x, y); \
140 t##n##_2##b (y); \
141 t##n##_3##b (y); \
142 t##n##_4##b (x); \
143 t##n##_5##b (x); \
144 if (__builtin_##b##_overflow_p (x, y, er)) \
145 bar (); \
146 if (__builtin_##b##_overflow_p ((t1) (v1), \
147 (t2) (v2), \
148 er)) \
149 bar (); \
150 if (v != 7 * o) \
151 __builtin_abort (); \
153 #ifdef OVFP
154 #undef T
155 #define T(n, t1, t2, tr, v1, v2, vr, b, o) \
156 TP(n, t1, t2, (tr) 0, v1, v2, b, o)
157 #endif
158 #define ST(n, t, v1, v2, vr, b, o) \
159 T (n, t, t, t, v1, v2, vr, b, o)