blob: 1f09865f13ebe7da04f1efe2c8c18f09f9c25795 [file] [log] [blame]
Roman Lebedevca1aaac2017-10-21 16:44:03 +00001// RUN: %clang_cc1 -triple=x86_64-pc-linux-gnu -fsyntax-only -DUNSIGNED -verify %s
2// RUN: %clang_cc1 -triple=x86_64-pc-win32 -fsyntax-only -DSIGNED -verify %s
3// RUN: %clang_cc1 -triple=x86_64-pc-linux-gnu -fsyntax-only -DUNSIGNED -DSILENCE -Wno-tautological-constant-compare -verify %s
4// RUN: %clang_cc1 -triple=x86_64-pc-win32 -fsyntax-only -DSIGNED -DSILENCE -Wno-tautological-constant-compare -verify %s
5
6int main() {
7 enum A { A_a = 2 };
8 enum A a;
9
10#ifdef SILENCE
11 // expected-no-diagnostics
Richard Smithbf0ad432017-12-08 00:45:25 +000012#endif
13
Hans Wennborg5791ce72017-12-08 16:54:08 +000014#ifdef UNSIGNED
15#ifndef SILENCE
Richard Smithbf0ad432017-12-08 00:45:25 +000016 if (a < 0) // expected-warning {{comparison of unsigned enum expression < 0 is always false}}
17 return 0;
18 if (0 >= a)
19 return 0;
20 if (a > 0)
21 return 0;
22 if (0 <= a) // expected-warning {{comparison of 0 <= unsigned enum expression is always true}}
23 return 0;
24 if (a <= 0)
25 return 0;
26 if (0 > a) // expected-warning {{comparison of 0 > unsigned enum expression is always false}}
27 return 0;
28 if (a >= 0) // expected-warning {{comparison of unsigned enum expression >= 0 is always true}}
29 return 0;
30 if (0 < a)
31 return 0;
32
Hans Wennborg5791ce72017-12-08 16:54:08 +000033 if (a < 0U) // expected-warning {{comparison of unsigned enum expression < 0 is always false}}
34 return 0;
35 if (0U >= a)
36 return 0;
37 if (a > 0U)
38 return 0;
39 if (0U <= a) // expected-warning {{comparison of 0 <= unsigned enum expression is always true}}
40 return 0;
41 if (a <= 0U)
42 return 0;
43 if (0U > a) // expected-warning {{comparison of 0 > unsigned enum expression is always false}}
44 return 0;
45 if (a >= 0U) // expected-warning {{comparison of unsigned enum expression >= 0 is always true}}
46 return 0;
47 if (0U < a)
48 return 0;
49
Richard Smithbf0ad432017-12-08 00:45:25 +000050 if (a < 4294967295)
51 return 0;
52 if (4294967295 >= a) // expected-warning {{comparison 4294967295 >= 'enum A' is always true}}
53 return 0;
54 if (a > 4294967295) // expected-warning {{comparison 'enum A' > 4294967295 is always false}}
55 return 0;
56 if (4294967295 <= a)
57 return 0;
58 if (a <= 4294967295) // expected-warning {{comparison 'enum A' <= 4294967295 is always true}}
59 return 0;
60 if (4294967295 > a)
61 return 0;
62 if (a >= 4294967295)
63 return 0;
64 if (4294967295 < a) // expected-warning {{comparison 4294967295 < 'enum A' is always false}}
65 return 0;
Hans Wennborg5791ce72017-12-08 16:54:08 +000066
67 if (a < 4294967295U)
68 return 0;
69 if (4294967295U >= a) // expected-warning {{comparison 4294967295 >= 'enum A' is always true}}
70 return 0;
71 if (a > 4294967295U) // expected-warning {{comparison 'enum A' > 4294967295 is always false}}
72 return 0;
73 if (4294967295U <= a)
74 return 0;
75 if (a <= 4294967295U) // expected-warning {{comparison 'enum A' <= 4294967295 is always true}}
76 return 0;
77 if (4294967295U > a)
78 return 0;
79 if (a >= 4294967295U)
80 return 0;
81 if (4294967295U < a) // expected-warning {{comparison 4294967295 < 'enum A' is always false}}
82 return 0;
83#else // SILENCE
Roman Lebedevca1aaac2017-10-21 16:44:03 +000084 if (a < 0)
85 return 0;
86 if (0 >= a)
87 return 0;
88 if (a > 0)
89 return 0;
90 if (0 <= a)
91 return 0;
92 if (a <= 0)
93 return 0;
94 if (0 > a)
95 return 0;
96 if (a >= 0)
97 return 0;
98 if (0 < a)
99 return 0;
100
Hans Wennborg5791ce72017-12-08 16:54:08 +0000101 if (a < 0U)
Roman Lebedevca1aaac2017-10-21 16:44:03 +0000102 return 0;
Hans Wennborg5791ce72017-12-08 16:54:08 +0000103 if (0U >= a)
Roman Lebedevca1aaac2017-10-21 16:44:03 +0000104 return 0;
Hans Wennborg5791ce72017-12-08 16:54:08 +0000105 if (a > 0U)
Roman Lebedevca1aaac2017-10-21 16:44:03 +0000106 return 0;
Hans Wennborg5791ce72017-12-08 16:54:08 +0000107 if (0U <= a)
Roman Lebedevca1aaac2017-10-21 16:44:03 +0000108 return 0;
Hans Wennborg5791ce72017-12-08 16:54:08 +0000109 if (a <= 0U)
Roman Lebedevca1aaac2017-10-21 16:44:03 +0000110 return 0;
Hans Wennborg5791ce72017-12-08 16:54:08 +0000111 if (0U > a)
Roman Lebedevca1aaac2017-10-21 16:44:03 +0000112 return 0;
Hans Wennborg5791ce72017-12-08 16:54:08 +0000113 if (a >= 0U)
Roman Lebedevca1aaac2017-10-21 16:44:03 +0000114 return 0;
Hans Wennborg5791ce72017-12-08 16:54:08 +0000115 if (0U < a)
Roman Lebedevca1aaac2017-10-21 16:44:03 +0000116 return 0;
Hans Wennborg5791ce72017-12-08 16:54:08 +0000117
Roman Lebedevca1aaac2017-10-21 16:44:03 +0000118 if (a < 4294967295)
119 return 0;
120 if (4294967295 >= a)
121 return 0;
122 if (a > 4294967295)
123 return 0;
124 if (4294967295 <= a)
125 return 0;
126 if (a <= 4294967295)
127 return 0;
128 if (4294967295 > a)
129 return 0;
130 if (a >= 4294967295)
131 return 0;
132 if (4294967295 < a)
133 return 0;
Richard Smithbf0ad432017-12-08 00:45:25 +0000134
Hans Wennborg5791ce72017-12-08 16:54:08 +0000135 if (a < 4294967295U)
136 return 0;
137 if (4294967295U >= a)
138 return 0;
139 if (a > 4294967295U)
140 return 0;
141 if (4294967295U <= a)
142 return 0;
143 if (a <= 4294967295U)
144 return 0;
145 if (4294967295U > a)
146 return 0;
147 if (a >= 4294967295U)
148 return 0;
149 if (4294967295U < a)
150 return 0;
151#endif
152#elif defined(SIGNED)
153#ifndef SILENCE
Roman Lebedevca1aaac2017-10-21 16:44:03 +0000154 if (a < -2147483648) // expected-warning {{comparison 'enum A' < -2147483648 is always false}}
155 return 0;
156 if (-2147483648 >= a)
157 return 0;
158 if (a > -2147483648)
159 return 0;
160 if (-2147483648 <= a) // expected-warning {{comparison -2147483648 <= 'enum A' is always true}}
161 return 0;
162 if (a <= -2147483648)
163 return 0;
164 if (-2147483648 > a) // expected-warning {{comparison -2147483648 > 'enum A' is always false}}
165 return 0;
166 if (a >= -2147483648) // expected-warning {{comparison 'enum A' >= -2147483648 is always true}}
167 return 0;
168 if (-2147483648 < a)
169 return 0;
170
171 if (a < 2147483647)
172 return 0;
173 if (2147483647 >= a) // expected-warning {{comparison 2147483647 >= 'enum A' is always true}}
174 return 0;
175 if (a > 2147483647) // expected-warning {{comparison 'enum A' > 2147483647 is always false}}
176 return 0;
177 if (2147483647 <= a)
178 return 0;
179 if (a <= 2147483647) // expected-warning {{comparison 'enum A' <= 2147483647 is always true}}
180 return 0;
181 if (2147483647 > a)
182 return 0;
183 if (a >= 2147483647)
184 return 0;
185 if (2147483647 < a) // expected-warning {{comparison 2147483647 < 'enum A' is always false}}
186 return 0;
Hans Wennborg5791ce72017-12-08 16:54:08 +0000187
188 if (a < 2147483647U)
Roman Lebedevca1aaac2017-10-21 16:44:03 +0000189 return 0;
Hans Wennborg5791ce72017-12-08 16:54:08 +0000190 if (2147483647U >= a) // expected-warning {{comparison 2147483647 >= 'enum A' is always true}}
Roman Lebedevca1aaac2017-10-21 16:44:03 +0000191 return 0;
Hans Wennborg5791ce72017-12-08 16:54:08 +0000192 if (a > 2147483647U) // expected-warning {{comparison 'enum A' > 2147483647 is always false}}
Roman Lebedevca1aaac2017-10-21 16:44:03 +0000193 return 0;
Hans Wennborg5791ce72017-12-08 16:54:08 +0000194 if (2147483647U <= a)
Roman Lebedevca1aaac2017-10-21 16:44:03 +0000195 return 0;
Hans Wennborg5791ce72017-12-08 16:54:08 +0000196 if (a <= 2147483647U) // expected-warning {{comparison 'enum A' <= 2147483647 is always true}}
Roman Lebedevca1aaac2017-10-21 16:44:03 +0000197 return 0;
Hans Wennborg5791ce72017-12-08 16:54:08 +0000198 if (2147483647U > a)
Roman Lebedevca1aaac2017-10-21 16:44:03 +0000199 return 0;
Hans Wennborg5791ce72017-12-08 16:54:08 +0000200 if (a >= 2147483647U)
Roman Lebedevca1aaac2017-10-21 16:44:03 +0000201 return 0;
Hans Wennborg5791ce72017-12-08 16:54:08 +0000202 if (2147483647U < a) // expected-warning {{comparison 2147483647 < 'enum A' is always false}}
Roman Lebedevca1aaac2017-10-21 16:44:03 +0000203 return 0;
Hans Wennborg5791ce72017-12-08 16:54:08 +0000204#else // SILENCE
Roman Lebedevca1aaac2017-10-21 16:44:03 +0000205 if (a < -2147483648)
206 return 0;
207 if (-2147483648 >= a)
208 return 0;
209 if (a > -2147483648)
210 return 0;
211 if (-2147483648 <= a)
212 return 0;
213 if (a <= -2147483648)
214 return 0;
215 if (-2147483648 > a)
216 return 0;
217 if (a >= -2147483648)
218 return 0;
219 if (-2147483648 < a)
220 return 0;
221
222 if (a < 2147483647)
223 return 0;
224 if (2147483647 >= a)
225 return 0;
226 if (a > 2147483647)
227 return 0;
228 if (2147483647 <= a)
229 return 0;
230 if (a <= 2147483647)
231 return 0;
232 if (2147483647 > a)
233 return 0;
234 if (a >= 2147483647)
235 return 0;
236 if (2147483647 < a)
237 return 0;
Hans Wennborg5791ce72017-12-08 16:54:08 +0000238
239 if (a < 2147483647U)
240 return 0;
241 if (2147483647U >= a)
242 return 0;
243 if (a > 2147483647U)
244 return 0;
245 if (2147483647U <= a)
246 return 0;
247 if (a <= 2147483647U)
248 return 0;
249 if (2147483647U > a)
250 return 0;
251 if (a >= 2147483647U)
252 return 0;
253 if (2147483647U < a)
254 return 0;
255#endif
Roman Lebedevca1aaac2017-10-21 16:44:03 +0000256#endif
257
258 return 1;
259}
260
261// https://bugs.llvm.org/show_bug.cgi?id=35009
262int PR35009() {
263 enum A { A_a = 2 };
264 enum A a;
265
266 // in C, this should not warn.
267
268 if (a < 1)
269 return 0;
270 if (1 >= a)
271 return 0;
272 if (a > 1)
273 return 0;
274 if (1 <= a)
275 return 0;
276 if (a <= 1)
277 return 0;
278 if (1 > a)
279 return 0;
280 if (a >= 1)
281 return 0;
282 if (1 < a)
283 return 0;
284 if (a == 1)
285 return 0;
286 if (1 != a)
287 return 0;
288 if (a != 1)
289 return 0;
290 if (1 == a)
291 return 0;
292
293 if (a < 1U)
294 return 0;
295 if (1U >= a)
296 return 0;
297 if (a > 1U)
298 return 0;
299 if (1U <= a)
300 return 0;
301 if (a <= 1U)
302 return 0;
303 if (1U > a)
304 return 0;
305 if (a >= 1U)
306 return 0;
307 if (1U < a)
308 return 0;
309 if (a == 1U)
310 return 0;
311 if (1U != a)
312 return 0;
313 if (a != 1U)
314 return 0;
315 if (1U == a)
316 return 0;
317
318 if (a < 2)
319 return 0;
320 if (2 >= a)
321 return 0;
322 if (a > 2)
323 return 0;
324 if (2 <= a)
325 return 0;
326 if (a <= 2)
327 return 0;
328 if (2 > a)
329 return 0;
330 if (a >= 2)
331 return 0;
332 if (2 < a)
333 return 0;
334 if (a == 2)
335 return 0;
336 if (2 != a)
337 return 0;
338 if (a != 2)
339 return 0;
340 if (2 == a)
341 return 0;
342
343 if (a < 2U)
344 return 0;
345 if (2U >= a)
346 return 0;
347 if (a > 2U)
348 return 0;
349 if (2U <= a)
350 return 0;
351 if (a <= 2U)
352 return 0;
353 if (2U > a)
354 return 0;
355 if (a >= 2U)
356 return 0;
357 if (2U < a)
358 return 0;
359 if (a == 2U)
360 return 0;
361 if (2U != a)
362 return 0;
363 if (a != 2U)
364 return 0;
365 if (2U == a)
366 return 0;
367
368 if (a < 3)
369 return 0;
370 if (3 >= a)
371 return 0;
372 if (a > 3)
373 return 0;
374 if (3 <= a)
375 return 0;
376 if (a <= 3)
377 return 0;
378 if (3 > a)
379 return 0;
380 if (a >= 3)
381 return 0;
382 if (3 < a)
383 return 0;
384 if (a == 3)
385 return 0;
386 if (3 != a)
387 return 0;
388 if (a != 3)
389 return 0;
390 if (3 == a)
391 return 0;
392
393 if (a < 3U)
394 return 0;
395 if (3U >= a)
396 return 0;
397 if (a > 3U)
398 return 0;
399 if (3U <= a)
400 return 0;
401 if (a <= 3U)
402 return 0;
403 if (3U > a)
404 return 0;
405 if (a >= 3U)
406 return 0;
407 if (3U < a)
408 return 0;
409 if (a == 3U)
410 return 0;
411 if (3U != a)
412 return 0;
413 if (a != 3U)
414 return 0;
415 if (3U == a)
416 return 0;
417
418 return 1;
419}