Merged revisions 208012,208018-208019,208021,208023-208030,208033,208037,208040-20804...
[official-gcc.git] / main / gcc / testsuite / c-c++-common / ubsan / overflow-1.c
blob68199551b497cda8dac476a44b1d13aa9a357e4f
1 /* { dg-do run } */
2 /* { dg-options "-fsanitize=signed-integer-overflow" } */
4 #include <stdio.h>
6 #ifndef ASM1
7 # define ASM1(a) /* Nothing */
8 #endif
9 #ifndef ASM2
10 # define ASM2(a, b) /* Nothing */
11 #endif
13 #define CHECK(A, B) ({ if ((A) != (B)) __builtin_abort (); })
15 #define FN1(T1, T2, OP) \
16 ({ \
17 T1 a = 14; \
18 T2 b = 9; \
19 ASM2 (a, b); \
20 a OP b; \
23 #define FN2(T, OP) \
24 ({ \
25 T a = 14; \
26 ASM1 (a); \
27 a OP 7; \
30 #define FN3(T1, T2, OP) \
31 ({ \
32 T1 a = 4; \
33 T2 b = 1; \
34 ASM2 (a, b); \
35 ~a OP b; \
38 #define FN4(T1, T2, OP) \
39 ({ \
40 T1 a = 4; \
41 T2 b = 1; \
42 ASM2 (a, b); \
43 a OP ~b; \
46 #define FN5(T) \
47 ({ \
48 T a = 77; \
49 ASM1 (a); \
50 -a; \
53 int
54 main (void)
56 fputs ("UBSAN TEST START\n", stderr);
58 CHECK (FN1 (char, char, +), 23);
59 CHECK (FN1 (char, char, -), 5);
60 CHECK (FN1 (char, char, *), 126);
61 CHECK (FN1 (unsigned char, unsigned char, +), 23);
62 CHECK (FN1 (unsigned char, unsigned char, -), 5);
63 CHECK (FN1 (unsigned char, unsigned char, *), 126);
64 CHECK (FN1 (short, short, +), 23);
65 CHECK (FN1 (short, short, -), 5);
66 CHECK (FN1 (short, short, *), 126);
67 CHECK (FN1 (unsigned short, unsigned short, +), 23);
68 CHECK (FN1 (unsigned short, unsigned short, -), 5);
69 CHECK (FN1 (unsigned short, unsigned short, *), 126);
70 CHECK (FN1 (int, int, +), 23);
71 CHECK (FN1 (int, int, -), 5);
72 CHECK (FN1 (int, int, *), 126);
73 CHECK (FN1 (unsigned int, unsigned int, +), 23);
74 CHECK (FN1 (unsigned int, unsigned int, -), 5);
75 CHECK (FN1 (unsigned int, unsigned int, *), 126);
76 CHECK (FN1 (long int, long int, +), 23);
77 CHECK (FN1 (long int, long int, -), 5);
78 CHECK (FN1 (long int, long int, *), 126);
79 CHECK (FN1 (unsigned long int, unsigned long int, +), 23);
80 CHECK (FN1 (unsigned long int, unsigned long int, -), 5);
81 CHECK (FN1 (unsigned long int, unsigned long int, *), 126);
82 CHECK (FN1 (long long int, long int, +), 23);
83 CHECK (FN1 (long long int, long int, -), 5);
84 CHECK (FN1 (long long int, long int, *), 126);
85 CHECK (FN1 (unsigned long long int, unsigned long long int, +), 23);
86 CHECK (FN1 (unsigned long long int, unsigned long long int, -), 5);
87 CHECK (FN1 (unsigned long long int, unsigned long long int, *), 126);
88 CHECK (FN1 (int, unsigned char, +), 23);
89 CHECK (FN1 (int, unsigned char, -), 5);
90 CHECK (FN1 (int, unsigned char, *), 126);
91 CHECK (FN1 (unsigned char, int, +), 23);
92 CHECK (FN1 (unsigned char, int, -), 5);
93 CHECK (FN1 (unsigned char, int, *), 126);
94 CHECK (FN1 (int, long int, +), 23);
95 CHECK (FN1 (int, long int, -), 5);
96 CHECK (FN1 (int, long int, *), 126);
97 CHECK (FN1 (long int, int, +), 23);
98 CHECK (FN1 (long int, int, -), 5);
99 CHECK (FN1 (long int, int, *), 126);
100 CHECK (FN1 (unsigned int, int, +), 23);
101 CHECK (FN1 (unsigned int, int, -), 5);
102 CHECK (FN1 (unsigned int, int, *), 126);
103 CHECK (FN1 (int, unsigned int, +), 23);
104 CHECK (FN1 (int, unsigned int, -), 5);
105 CHECK (FN1 (int, unsigned int, *), 126);
106 CHECK (FN1 (unsigned long int, int, +), 23);
107 CHECK (FN1 (unsigned long int, int, -), 5);
108 CHECK (FN1 (unsigned long int, int, *), 126);
109 CHECK (FN1 (int, unsigned long int, +), 23);
110 CHECK (FN1 (int, unsigned long int, -), 5);
111 CHECK (FN1 (int, unsigned long int, *), 126);
113 CHECK (FN2 (char, +), 21);
114 CHECK (FN2 (char, -), 7);
115 CHECK (FN2 (char, *), 98);
116 CHECK (FN2 (unsigned char, +), 21);
117 CHECK (FN2 (unsigned char, -), 7);
118 CHECK (FN2 (unsigned char, *), 98);
119 CHECK (FN2 (short, +), 21);
120 CHECK (FN2 (short, -), 7);
121 CHECK (FN2 (short, *), 98);
122 CHECK (FN2 (unsigned short, +), 21);
123 CHECK (FN2 (unsigned short, -), 7);
124 CHECK (FN2 (unsigned short, *), 98);
125 CHECK (FN2 (int, +), 21);
126 CHECK (FN2 (int, -), 7);
127 CHECK (FN2 (int, *), 98);
128 CHECK (FN2 (unsigned int, +), 21);
129 CHECK (FN2 (unsigned int, -), 7);
130 CHECK (FN2 (unsigned int, *), 98);
131 CHECK (FN2 (long int, +), 21);
132 CHECK (FN2 (long int, -), 7);
133 CHECK (FN2 (long int, *), 98);
134 CHECK (FN2 (unsigned long int, +), 21);
135 CHECK (FN2 (unsigned long int, -), 7);
136 CHECK (FN2 (unsigned long int, *), 98);
137 CHECK (FN2 (long long int, +), 21);
138 CHECK (FN2 (long long int, -), 7);
139 CHECK (FN2 (long long int, *), 98);
140 CHECK (FN2 (unsigned long long int, +), 21);
141 CHECK (FN2 (unsigned long long int, -), 7);
142 CHECK (FN2 (unsigned long long int, *), 98);
144 CHECK (FN3 (char, char, +), -4);
145 CHECK (FN3 (char, char, -), -6);
146 CHECK (FN3 (char, char, *), -5);
147 CHECK (FN3 (unsigned char, unsigned char, +), -4);
148 CHECK (FN3 (unsigned char, unsigned char, -), -6);
149 CHECK (FN3 (unsigned char, unsigned char, *), -5);
150 CHECK (FN3 (short, short, +), -4);
151 CHECK (FN3 (short, short, -), -6);
152 CHECK (FN3 (short, short, *), -5);
153 CHECK (FN3 (unsigned short, unsigned short, +), -4);
154 CHECK (FN3 (unsigned short, unsigned short, -), -6);
155 CHECK (FN3 (unsigned short, unsigned short, *), -5);
156 CHECK (FN3 (int, int, +), -4);
157 CHECK (FN3 (int, int, -), -6);
158 CHECK (FN3 (int, int, *), -5);
159 CHECK (FN3 (unsigned int, unsigned int, +), -4);
160 CHECK (FN3 (unsigned int, unsigned int, -), -6);
161 CHECK (FN3 (unsigned int, unsigned int, *), -5);
162 CHECK (FN3 (long int, long int, +), -4);
163 CHECK (FN3 (long int, long int, -), -6);
164 CHECK (FN3 (long int, long int, *), -5);
165 CHECK (FN3 (unsigned long int, unsigned long int, +), -4);
166 CHECK (FN3 (unsigned long int, unsigned long int, -), -6);
167 CHECK (FN3 (unsigned long int, unsigned long int, *), -5);
168 CHECK (FN3 (long long int, long int, +), -4);
169 CHECK (FN3 (long long int, long int, -), -6);
170 CHECK (FN3 (long long int, long int, *), -5);
171 CHECK (FN3 (unsigned long long int, unsigned long long int, +), -4);
172 CHECK (FN3 (unsigned long long int, unsigned long long int, -), -6);
173 CHECK (FN3 (unsigned long long int, unsigned long long int, *), -5);
174 CHECK (FN3 (int, unsigned char, +), -4);
175 CHECK (FN3 (int, unsigned char, -), -6);
176 CHECK (FN3 (int, unsigned char, *), -5);
177 CHECK (FN3 (unsigned char, int, +), -4);
178 CHECK (FN3 (unsigned char, int, -), -6);
179 CHECK (FN3 (unsigned char, int, *), -5);
180 CHECK (FN3 (int, long int, +), -4);
181 CHECK (FN3 (int, long int, -), -6);
182 CHECK (FN3 (int, long int, *), -5);
183 CHECK (FN3 (long int, int, +), -4);
184 CHECK (FN3 (long int, int, -), -6);
185 CHECK (FN3 (long int, int, *), -5);
186 CHECK (FN3 (unsigned int, int, +), -4);
187 CHECK (FN3 (unsigned int, int, -), -6);
188 CHECK (FN3 (unsigned int, int, *), -5);
189 CHECK (FN3 (int, unsigned int, +), -4);
190 CHECK (FN3 (int, unsigned int, -), -6);
191 CHECK (FN3 (int, unsigned int, *), -5);
192 CHECK (FN3 (unsigned long int, int, +), -4);
193 CHECK (FN3 (unsigned long int, int, -), -6);
194 CHECK (FN3 (unsigned long int, int, *), -5);
195 CHECK (FN3 (int, unsigned long int, +), -4);
196 CHECK (FN3 (int, unsigned long int, -), -6);
197 CHECK (FN3 (int, unsigned long int, *), -5);
199 CHECK (FN4 (char, char, +), 2);
200 CHECK (FN4 (char, char, -), 6);
201 CHECK (FN4 (char, char, *), -8);
202 CHECK (FN4 (unsigned char, unsigned char, +), 2);
203 CHECK (FN4 (unsigned char, unsigned char, -), 6);
204 CHECK (FN4 (unsigned char, unsigned char, *), -8);
205 CHECK (FN4 (short, short, +), 2);
206 CHECK (FN4 (short, short, -), 6);
207 CHECK (FN4 (short, short, *), -8);
208 CHECK (FN4 (unsigned short, unsigned short, +), 2);
209 CHECK (FN4 (unsigned short, unsigned short, -), 6);
210 CHECK (FN4 (unsigned short, unsigned short, *), -8);
211 CHECK (FN4 (int, int, +), 2);
212 CHECK (FN4 (int, int, -), 6);
213 CHECK (FN4 (int, int, *), -8);
214 CHECK (FN4 (unsigned int, unsigned int, +), 2);
215 CHECK (FN4 (unsigned int, unsigned int, -), 6);
216 CHECK (FN4 (unsigned int, unsigned int, *), -8);
217 CHECK (FN4 (long int, long int, +), 2);
218 CHECK (FN4 (long int, long int, -), 6);
219 CHECK (FN4 (long int, long int, *), -8);
220 CHECK (FN4 (unsigned long int, unsigned long int, +), 2);
221 CHECK (FN4 (unsigned long int, unsigned long int, -), 6);
222 CHECK (FN4 (unsigned long int, unsigned long int, *), -8);
223 CHECK (FN4 (long long int, long int, +), 2);
224 CHECK (FN4 (long long int, long int, -), 6);
225 CHECK (FN4 (long long int, long int, *), -8);
226 CHECK (FN4 (unsigned long long int, unsigned long long int, +), 2);
227 CHECK (FN4 (unsigned long long int, unsigned long long int, -), 6);
228 CHECK (FN4 (unsigned long long int, unsigned long long int, *), -8);
229 CHECK (FN4 (int, unsigned char, +), 2);
230 CHECK (FN4 (int, unsigned char, -), 6);
231 CHECK (FN4 (int, unsigned char, *), -8);
232 CHECK (FN4 (unsigned char, int, +), 2);
233 CHECK (FN4 (unsigned char, int, -), 6);
234 CHECK (FN4 (unsigned char, int, *), -8);
235 CHECK (FN4 (int, long int, +), 2);
236 CHECK (FN4 (int, long int, -), 6);
237 CHECK (FN4 (int, long int, *), -8);
238 CHECK (FN4 (long int, int, +), 2);
239 CHECK (FN4 (long int, int, -), 6);
240 CHECK (FN4 (long int, int, *), -8);
241 CHECK (FN4 (unsigned int, int, +), 2);
242 CHECK (FN4 (unsigned int, int, -), 6);
243 CHECK (FN4 (unsigned int, int, *), -8);
244 CHECK (FN4 (int, unsigned int, +), 2);
245 CHECK (FN4 (int, unsigned int, -), 6);
246 CHECK (FN4 (int, unsigned int, *), -8);
247 CHECK (FN4 (unsigned long int, int, +), 2);
248 CHECK (FN4 (unsigned long int, int, -), 6);
249 CHECK (FN4 (unsigned long int, int, *), -8);
250 CHECK (FN4 (int, unsigned long int, +), 2);
251 CHECK (FN4 (int, unsigned long int, -), 6);
252 CHECK (FN4 (int, unsigned long int, *), -8);
254 CHECK (FN5 (char), -77);
255 CHECK (FN5 (unsigned char), -77);
256 CHECK (FN5 (short), -77);
257 CHECK (FN5 (unsigned short), -77);
258 CHECK (FN5 (int), -77);
259 CHECK (FN5 (unsigned int), -77);
260 CHECK (FN5 (long int), -77);
261 CHECK (FN5 (unsigned long int), -77);
262 CHECK (FN5 (long long int), -77);
263 CHECK (FN5 (unsigned long long int), -77);
265 fputs ("UBSAN TEST END\n", stderr);
266 return 0;
269 /* { dg-output "UBSAN TEST START(\n|\r\n|\r)UBSAN TEST END" } */