1 // RUN: %clang_analyze_cc1 -analyzer-checker=debug.ExprInspection,core.builtin -analyzer-config aggressive-binary-operation-simplification=true -verify -analyzer-config eagerly-assume=false %s
2
3 void clang_analyzer_eval(int x);
4 void clang_analyzer_denote(int x, const char *literal);
5 void clang_analyzer_express(int x);
6
7 void exit(int);
8
9 #define UINT_MAX (~0U)
10 #define INT_MAX (UINT_MAX & (UINT_MAX >> 1))
11
12 extern void __assert_fail (__const char *__assertion, __const char *__file,
13 unsigned int __line, __const char *__function)
14 __attribute__ ((__noreturn__));
15 #define assert(expr) \
16 ((expr) ? (void)(0) : __assert_fail (#expr, __FILE__, __LINE__, __func__))
17
18 int g();
f()19 int f() {
20 int x = g();
21 // Assert that no overflows occur in this test file.
22 // Assuming that concrete integers are also within that range.
23 assert(x <= ((int)INT_MAX / 4));
24 assert(x >= -((int)INT_MAX / 4));
25 return x;
26 }
27
compare_different_symbol_equal()28 void compare_different_symbol_equal() {
29 int x = f(), y = f();
30 clang_analyzer_denote(x, "$x");
31 clang_analyzer_denote(y, "$y");
32 clang_analyzer_express(x == y); // expected-warning {{$x - $y == 0}}
33 }
34
compare_different_symbol_plus_left_int_equal()35 void compare_different_symbol_plus_left_int_equal() {
36 int x = f(), y = f();
37 clang_analyzer_denote(x, "$x");
38 clang_analyzer_denote(y, "$y");
39 x += 1;
40 clang_analyzer_express(x == y); // expected-warning {{$y - $x == 1}}
41 }
42
compare_different_symbol_minus_left_int_equal()43 void compare_different_symbol_minus_left_int_equal() {
44 int x = f(), y = f();
45 clang_analyzer_denote(x, "$x");
46 clang_analyzer_denote(y, "$y");
47 x -= 1;
48 clang_analyzer_express(x == y); // expected-warning {{$x - $y == 1}}
49 }
50
compare_different_symbol_plus_right_int_equal()51 void compare_different_symbol_plus_right_int_equal() {
52 int x = f(), y = f();
53 clang_analyzer_denote(x, "$x");
54 clang_analyzer_denote(y, "$y");
55 y += 2;
56 clang_analyzer_express(y); // expected-warning {{$y + 2}}
57 clang_analyzer_express(x == y); // expected-warning {{$x - $y == 2}}
58 }
59
compare_different_symbol_minus_right_int_equal()60 void compare_different_symbol_minus_right_int_equal() {
61 int x = f(), y = f();
62 clang_analyzer_denote(x, "$x");
63 clang_analyzer_denote(y, "$y");
64 y -= 2;
65 clang_analyzer_express(y); // expected-warning {{$y - 2}}
66 clang_analyzer_express(x == y); // expected-warning {{$y - $x == 2}}
67 }
68
compare_different_symbol_plus_left_plus_right_int_equal()69 void compare_different_symbol_plus_left_plus_right_int_equal() {
70 int x = f(), y = f();
71 clang_analyzer_denote(x, "$x");
72 clang_analyzer_denote(y, "$y");
73 x += 2;
74 y += 1;
75 clang_analyzer_express(x); // expected-warning {{$x + 2}}
76 clang_analyzer_express(y); // expected-warning {{$y + 1}}
77 clang_analyzer_express(x == y); // expected-warning {{$y - $x == 1}}
78 }
79
compare_different_symbol_plus_left_minus_right_int_equal()80 void compare_different_symbol_plus_left_minus_right_int_equal() {
81 int x = f(), y = f();
82 clang_analyzer_denote(x, "$x");
83 clang_analyzer_denote(y, "$y");
84 x += 2;
85 y -= 1;
86 clang_analyzer_express(x); // expected-warning {{$x + 2}}
87 clang_analyzer_express(y); // expected-warning {{$y - 1}}
88 clang_analyzer_express(x == y); // expected-warning {{$y - $x == 3}}
89 }
90
compare_different_symbol_minus_left_plus_right_int_equal()91 void compare_different_symbol_minus_left_plus_right_int_equal() {
92 int x = f(), y = f();
93 clang_analyzer_denote(x, "$x");
94 clang_analyzer_denote(y, "$y");
95 x -= 2;
96 y += 1;
97 clang_analyzer_express(x); // expected-warning {{$x - 2}}
98 clang_analyzer_express(y); // expected-warning {{$y + 1}}
99 clang_analyzer_express(x == y); // expected-warning {{$x - $y == 3}}
100 }
101
compare_different_symbol_minus_left_minus_right_int_equal()102 void compare_different_symbol_minus_left_minus_right_int_equal() {
103 int x = f(), y = f();
104 clang_analyzer_denote(x, "$x");
105 clang_analyzer_denote(y, "$y");
106 x -= 2;
107 y -= 1;
108 clang_analyzer_express(x); // expected-warning {{$x - 2}}
109 clang_analyzer_express(y); // expected-warning {{$y - 1}}
110 clang_analyzer_express(x == y); // expected-warning {{$x - $y == 1}}
111 }
112
compare_same_symbol_equal()113 void compare_same_symbol_equal() {
114 int x = f(), y = x;
115 clang_analyzer_denote(x, "$x");
116 clang_analyzer_express(y); // expected-warning {{$x}}
117 clang_analyzer_eval(x == y); // expected-warning {{TRUE}}
118 }
119
compare_same_symbol_plus_left_int_equal()120 void compare_same_symbol_plus_left_int_equal() {
121 int x = f(), y = x;
122 clang_analyzer_denote(x, "$x");
123 ++x;
124 clang_analyzer_express(x); // expected-warning {{$x + 1}}
125 clang_analyzer_express(y); // expected-warning {{$x}}
126 clang_analyzer_eval(x == y); // expected-warning {{FALSE}}
127 }
128
compare_same_symbol_minus_left_int_equal()129 void compare_same_symbol_minus_left_int_equal() {
130 int x = f(), y = x;
131 clang_analyzer_denote(x, "$x");
132 --x;
133 clang_analyzer_express(x); // expected-warning {{$x - 1}}
134 clang_analyzer_express(y); // expected-warning {{$x}}
135 clang_analyzer_eval(x == y); // expected-warning {{FALSE}}
136 }
137
compare_same_symbol_plus_right_int_equal()138 void compare_same_symbol_plus_right_int_equal() {
139 int x = f(), y = x + 1;
140 clang_analyzer_denote(x, "$x");
141 clang_analyzer_express(y); // expected-warning {{$x + 1}}
142 clang_analyzer_eval(x == y); // expected-warning {{FALSE}}
143 }
144
compare_same_symbol_minus_right_int_equal()145 void compare_same_symbol_minus_right_int_equal() {
146 int x = f(), y = x - 1;
147 clang_analyzer_denote(x, "$x");
148 clang_analyzer_express(y); // expected-warning {{$x - 1}}
149 clang_analyzer_eval(x == y); // expected-warning {{FALSE}}
150 }
151
compare_same_symbol_plus_left_plus_right_int_equal()152 void compare_same_symbol_plus_left_plus_right_int_equal() {
153 int x = f(), y = x + 1;
154 clang_analyzer_denote(x, "$x");
155 ++x;
156 clang_analyzer_express(x); // expected-warning {{$x + 1}}
157 clang_analyzer_express(y); // expected-warning {{$x + 1}}
158 clang_analyzer_eval(x == y); // expected-warning {{TRUE}}
159 }
160
compare_same_symbol_plus_left_minus_right_int_equal()161 void compare_same_symbol_plus_left_minus_right_int_equal() {
162 int x = f(), y = x - 1;
163 clang_analyzer_denote(x, "$x");
164 ++x;
165 clang_analyzer_express(x); // expected-warning {{$x + 1}}
166 clang_analyzer_express(y); // expected-warning {{$x - 1}}
167 clang_analyzer_eval(x == y); // expected-warning {{FALSE}}
168 }
169
compare_same_symbol_minus_left_plus_right_int_equal()170 void compare_same_symbol_minus_left_plus_right_int_equal() {
171 int x = f(), y = x + 1;
172 clang_analyzer_denote(x, "$x");
173 --x;
174 clang_analyzer_express(x); // expected-warning {{$x - 1}}
175 clang_analyzer_express(y); // expected-warning {{$x + 1}}
176 clang_analyzer_eval(x == y); // expected-warning {{FALSE}}
177 }
178
compare_same_symbol_minus_left_minus_right_int_equal()179 void compare_same_symbol_minus_left_minus_right_int_equal() {
180 int x = f(), y = x - 1;
181 clang_analyzer_denote(x, "$x");
182 --x;
183 clang_analyzer_express(x); // expected-warning {{$x - 1}}
184 clang_analyzer_express(y); // expected-warning {{$x - 1}}
185 clang_analyzer_eval(x == y); // expected-warning {{TRUE}}
186 }
187
compare_different_symbol_less_or_equal()188 void compare_different_symbol_less_or_equal() {
189 int x = f(), y = f();
190 clang_analyzer_denote(x, "$x");
191 clang_analyzer_denote(y, "$y");
192 clang_analyzer_express(x <= y); // expected-warning {{$x - $y <= 0}}
193 }
194
compare_different_symbol_plus_left_int_less_or_equal()195 void compare_different_symbol_plus_left_int_less_or_equal() {
196 int x = f(), y = f();
197 clang_analyzer_denote(x, "$x");
198 clang_analyzer_denote(y, "$y");
199 x += 1;
200 clang_analyzer_express(x); // expected-warning {{$x + 1}}
201 clang_analyzer_express(x <= y); // expected-warning {{$y - $x >= 1}}
202 }
203
compare_different_symbol_minus_left_int_less_or_equal()204 void compare_different_symbol_minus_left_int_less_or_equal() {
205 int x = f(), y = f();
206 clang_analyzer_denote(x, "$x");
207 clang_analyzer_denote(y, "$y");
208 x -= 1;
209 clang_analyzer_express(x <= y); // expected-warning {{$x - $y <= 1}}
210 }
211
compare_different_symbol_plus_right_int_less_or_equal()212 void compare_different_symbol_plus_right_int_less_or_equal() {
213 int x = f(), y = f();
214 clang_analyzer_denote(x, "$x");
215 clang_analyzer_denote(y, "$y");
216 y += 2;
217 clang_analyzer_express(x <= y); // expected-warning {{$x - $y <= 2}}
218 }
219
compare_different_symbol_minus_right_int_less_or_equal()220 void compare_different_symbol_minus_right_int_less_or_equal() {
221 int x = f(), y = f();
222 clang_analyzer_denote(x, "$x");
223 clang_analyzer_denote(y, "$y");
224 y -= 2;
225 clang_analyzer_express(y); // expected-warning {{$y - 2}}
226 clang_analyzer_express(x <= y); // expected-warning {{$y - $x >= 2}}
227 }
228
compare_different_symbol_plus_left_plus_right_int_less_or_equal()229 void compare_different_symbol_plus_left_plus_right_int_less_or_equal() {
230 int x = f(), y = f();
231 clang_analyzer_denote(x, "$x");
232 clang_analyzer_denote(y, "$y");
233 x += 2;
234 y += 1;
235 clang_analyzer_express(x); // expected-warning {{$x + 2}}
236 clang_analyzer_express(y); // expected-warning {{$y + 1}}
237 clang_analyzer_express(x <= y); // expected-warning {{$y - $x >= 1}}
238 }
239
compare_different_symbol_plus_left_minus_right_int_less_or_equal()240 void compare_different_symbol_plus_left_minus_right_int_less_or_equal() {
241 int x = f(), y = f();
242 clang_analyzer_denote(x, "$x");
243 clang_analyzer_denote(y, "$y");
244 x += 2;
245 y -= 1;
246 clang_analyzer_express(x); // expected-warning {{$x + 2}}
247 clang_analyzer_express(y); // expected-warning {{$y - 1}}
248 clang_analyzer_express(x <= y); // expected-warning {{$y - $x >= 3}}
249 }
250
compare_different_symbol_minus_left_plus_right_int_less_or_equal()251 void compare_different_symbol_minus_left_plus_right_int_less_or_equal() {
252 int x = f(), y = f();
253 clang_analyzer_denote(x, "$x");
254 clang_analyzer_denote(y, "$y");
255 x -= 2;
256 y += 1;
257 clang_analyzer_express(x); // expected-warning {{$x - 2}}
258 clang_analyzer_express(y); // expected-warning {{$y + 1}}
259 clang_analyzer_express(x <= y); // expected-warning {{$x - $y <= 3}}
260 }
261
compare_different_symbol_minus_left_minus_right_int_less_or_equal()262 void compare_different_symbol_minus_left_minus_right_int_less_or_equal() {
263 int x = f(), y = f();
264 clang_analyzer_denote(x, "$x");
265 clang_analyzer_denote(y, "$y");
266 x -= 2;
267 y -= 1;
268 clang_analyzer_express(x); // expected-warning {{$x - 2}}
269 clang_analyzer_express(y); // expected-warning {{$y - 1}}
270 clang_analyzer_express(x <= y); // expected-warning {{$x - $y <= 1}}
271 }
272
compare_same_symbol_less_or_equal()273 void compare_same_symbol_less_or_equal() {
274 int x = f(), y = x;
275 clang_analyzer_denote(x, "$x");
276 clang_analyzer_express(y); // expected-warning {{$x}}
277 clang_analyzer_eval(x <= y); // expected-warning {{TRUE}}
278 }
279
compare_same_symbol_plus_left_int_less_or_equal()280 void compare_same_symbol_plus_left_int_less_or_equal() {
281 int x = f(), y = x;
282 clang_analyzer_denote(x, "$x");
283 ++x;
284 clang_analyzer_express(x); // expected-warning {{$x + 1}}
285 clang_analyzer_express(y); // expected-warning {{$x}}
286 clang_analyzer_eval(x <= y); // expected-warning {{FALSE}}
287 }
288
compare_same_symbol_minus_left_int_less_or_equal()289 void compare_same_symbol_minus_left_int_less_or_equal() {
290 int x = f(), y = x;
291 clang_analyzer_denote(x, "$x");
292 --x;
293 clang_analyzer_express(x); // expected-warning {{$x - 1}}
294 clang_analyzer_express(y); // expected-warning {{$x}}
295 clang_analyzer_eval(x <= y); // expected-warning {{TRUE}}
296 }
297
compare_same_symbol_plus_right_int_less_or_equal()298 void compare_same_symbol_plus_right_int_less_or_equal() {
299 int x = f(), y = x + 1;
300 clang_analyzer_denote(x, "$x");
301 clang_analyzer_express(y); // expected-warning {{$x + 1}}
302 clang_analyzer_eval(x <= y); // expected-warning {{TRUE}}
303 }
304
compare_same_symbol_minus_right_int_less_or_equal()305 void compare_same_symbol_minus_right_int_less_or_equal() {
306 int x = f(), y = x - 1;
307 clang_analyzer_denote(x, "$x");
308 clang_analyzer_express(y); // expected-warning {{$x - 1}}
309 clang_analyzer_eval(x <= y); // expected-warning {{FALSE}}
310 }
311
compare_same_symbol_plus_left_plus_right_int_less_or_equal()312 void compare_same_symbol_plus_left_plus_right_int_less_or_equal() {
313 int x = f(), y = x + 1;
314 clang_analyzer_denote(x, "$x");
315 ++x;
316 clang_analyzer_express(x); // expected-warning {{$x + 1}}
317 clang_analyzer_express(y); // expected-warning {{$x + 1}}
318 clang_analyzer_eval(x <= y); // expected-warning {{TRUE}}
319 }
320
compare_same_symbol_plus_left_minus_right_int_less_or_equal()321 void compare_same_symbol_plus_left_minus_right_int_less_or_equal() {
322 int x = f(), y = x - 1;
323 clang_analyzer_denote(x, "$x");
324 ++x;
325 clang_analyzer_express(x); // expected-warning {{$x + 1}}
326 clang_analyzer_express(y); // expected-warning {{$x - 1}}
327 clang_analyzer_eval(x <= y); // expected-warning {{FALSE}}
328 }
329
compare_same_symbol_minus_left_plus_right_int_less_or_equal()330 void compare_same_symbol_minus_left_plus_right_int_less_or_equal() {
331 int x = f(), y = x + 1;
332 clang_analyzer_denote(x, "$x");
333 --x;
334 clang_analyzer_express(x); // expected-warning {{$x - 1}}
335 clang_analyzer_express(y); // expected-warning {{$x + 1}}
336 clang_analyzer_eval(x <= y); // expected-warning {{TRUE}}
337 }
338
compare_same_symbol_minus_left_minus_right_int_less_or_equal()339 void compare_same_symbol_minus_left_minus_right_int_less_or_equal() {
340 int x = f(), y = x - 1;
341 clang_analyzer_denote(x, "$x");
342 --x;
343 clang_analyzer_express(x); // expected-warning {{$x - 1}}
344 clang_analyzer_express(y); // expected-warning {{$x - 1}}
345 clang_analyzer_eval(x <= y); // expected-warning {{TRUE}}
346 }
347
compare_different_symbol_less()348 void compare_different_symbol_less() {
349 int x = f(), y = f();
350 clang_analyzer_denote(x, "$x");
351 clang_analyzer_denote(y, "$y");
352 clang_analyzer_express(y); // expected-warning {{$y}}
353 clang_analyzer_express(x < y); // expected-warning {{$x - $y < 0}}
354 }
355
compare_different_symbol_plus_left_int_less()356 void compare_different_symbol_plus_left_int_less() {
357 int x = f(), y = f();
358 clang_analyzer_denote(x, "$x");
359 clang_analyzer_denote(y, "$y");
360 x += 1;
361 clang_analyzer_express(x); // expected-warning {{$x + 1}}
362 clang_analyzer_express(y); // expected-warning {{$y}}
363 clang_analyzer_express(x < y); // expected-warning {{$y - $x > 1}}
364 }
365
compare_different_symbol_minus_left_int_less()366 void compare_different_symbol_minus_left_int_less() {
367 int x = f(), y = f();
368 clang_analyzer_denote(x, "$x");
369 clang_analyzer_denote(y, "$y");
370 x -= 1;
371 clang_analyzer_express(x); // expected-warning {{$x - 1}}
372 clang_analyzer_express(y); // expected-warning {{$y}}
373 clang_analyzer_express(x < y); // expected-warning {{$x - $y < 1}}
374 }
375
compare_different_symbol_plus_right_int_less()376 void compare_different_symbol_plus_right_int_less() {
377 int x = f(), y = f();
378 clang_analyzer_denote(x, "$x");
379 clang_analyzer_denote(y, "$y");
380 y += 2;
381 clang_analyzer_express(y); // expected-warning {{$y + 2}}
382 clang_analyzer_express(x < y); // expected-warning {{$x - $y < 2}}
383 }
384
compare_different_symbol_minus_right_int_less()385 void compare_different_symbol_minus_right_int_less() {
386 int x = f(), y = f();
387 clang_analyzer_denote(x, "$x");
388 clang_analyzer_denote(y, "$y");
389 y -= 2;
390 clang_analyzer_express(y); // expected-warning {{$y - 2}}
391 clang_analyzer_express(x < y); // expected-warning {{$y - $x > 2}}
392 }
393
compare_different_symbol_plus_left_plus_right_int_less()394 void compare_different_symbol_plus_left_plus_right_int_less() {
395 int x = f(), y = f();
396 clang_analyzer_denote(x, "$x");
397 clang_analyzer_denote(y, "$y");
398 x += 2;
399 y += 1;
400 clang_analyzer_express(x); // expected-warning {{$x + 2}}
401 clang_analyzer_express(y); // expected-warning {{$y + 1}}
402 clang_analyzer_express(x < y); // expected-warning {{$y - $x > 1}}
403 }
404
compare_different_symbol_plus_left_minus_right_int_less()405 void compare_different_symbol_plus_left_minus_right_int_less() {
406 int x = f(), y = f();
407 clang_analyzer_denote(x, "$x");
408 clang_analyzer_denote(y, "$y");
409 x += 2;
410 y -= 1;
411 clang_analyzer_express(x); // expected-warning {{$x + 2}}
412 clang_analyzer_express(y); // expected-warning {{$y - 1}}
413 clang_analyzer_express(x < y); // expected-warning {{$y - $x > 3}}
414 }
415
compare_different_symbol_minus_left_plus_right_int_less()416 void compare_different_symbol_minus_left_plus_right_int_less() {
417 int x = f(), y = f();
418 clang_analyzer_denote(x, "$x");
419 clang_analyzer_denote(y, "$y");
420 x -= 2;
421 y += 1;
422 clang_analyzer_express(x); // expected-warning {{$x - 2}}
423 clang_analyzer_express(y); // expected-warning {{$y + 1}}
424 clang_analyzer_express(x < y); // expected-warning {{$x - $y < 3}}
425 }
426
compare_different_symbol_minus_left_minus_right_int_less()427 void compare_different_symbol_minus_left_minus_right_int_less() {
428 int x = f(), y = f();
429 clang_analyzer_denote(x, "$x");
430 clang_analyzer_denote(y, "$y");
431 x -= 2;
432 y -= 1;
433 clang_analyzer_express(x); // expected-warning {{$x - 2}}
434 clang_analyzer_express(y); // expected-warning {{$y - 1}}
435 clang_analyzer_express(x < y); // expected-warning {{$x - $y < 1}}
436 }
437
compare_same_symbol_less()438 void compare_same_symbol_less() {
439 int x = f(), y = x;
440 clang_analyzer_denote(x, "$x");
441 clang_analyzer_express(y); // expected-warning {{$x}}
442 clang_analyzer_eval(x < y); // expected-warning {{FALSE}}
443 }
444
compare_same_symbol_plus_left_int_less()445 void compare_same_symbol_plus_left_int_less() {
446 int x = f(), y = x;
447 clang_analyzer_denote(x, "$x");
448 ++x;
449 clang_analyzer_express(x); // expected-warning {{$x + 1}}
450 clang_analyzer_express(y); // expected-warning {{$x}}
451 clang_analyzer_eval(x < y); // expected-warning {{FALSE}}
452 }
453
compare_same_symbol_minus_left_int_less()454 void compare_same_symbol_minus_left_int_less() {
455 int x = f(), y = x;
456 clang_analyzer_denote(x, "$x");
457 --x;
458 clang_analyzer_express(x); // expected-warning {{$x - 1}}
459 clang_analyzer_express(y); // expected-warning {{$x}}
460 clang_analyzer_eval(x < y); // expected-warning {{TRUE}}
461 }
462
compare_same_symbol_plus_right_int_less()463 void compare_same_symbol_plus_right_int_less() {
464 int x = f(), y = x + 1;
465 clang_analyzer_denote(x, "$x");
466 clang_analyzer_express(y); // expected-warning {{$x + 1}}
467 clang_analyzer_eval(x < y); // expected-warning {{TRUE}}
468 }
469
compare_same_symbol_minus_right_int_less()470 void compare_same_symbol_minus_right_int_less() {
471 int x = f(), y = x - 1;
472 clang_analyzer_denote(x, "$x");
473 clang_analyzer_express(y); // expected-warning {{$x - 1}}
474 clang_analyzer_eval(x < y); // expected-warning {{FALSE}}
475 }
476
compare_same_symbol_plus_left_plus_right_int_less()477 void compare_same_symbol_plus_left_plus_right_int_less() {
478 int x = f(), y = x + 1;
479 clang_analyzer_denote(x, "$x");
480 ++x;
481 clang_analyzer_express(x); // expected-warning {{$x + 1}}
482 clang_analyzer_express(y); // expected-warning {{$x + 1}}
483 clang_analyzer_eval(x < y); // expected-warning {{FALSE}}
484 }
485
compare_same_symbol_plus_left_minus_right_int_less()486 void compare_same_symbol_plus_left_minus_right_int_less() {
487 int x = f(), y = x - 1;
488 clang_analyzer_denote(x, "$x");
489 ++x;
490 clang_analyzer_express(x); // expected-warning {{$x + 1}}
491 clang_analyzer_express(y); // expected-warning {{$x - 1}}
492 clang_analyzer_eval(x < y); // expected-warning {{FALSE}}
493 }
494
compare_same_symbol_minus_left_plus_right_int_less()495 void compare_same_symbol_minus_left_plus_right_int_less() {
496 int x = f(), y = x + 1;
497 clang_analyzer_denote(x, "$x");
498 --x;
499 clang_analyzer_express(x); // expected-warning {{$x - 1}}
500 clang_analyzer_express(y); // expected-warning {{$x + 1}}
501 clang_analyzer_eval(x < y); // expected-warning {{TRUE}}
502 }
503
compare_same_symbol_minus_left_minus_right_int_less()504 void compare_same_symbol_minus_left_minus_right_int_less() {
505 int x = f(), y = x - 1;
506 clang_analyzer_denote(x, "$x");
507 --x;
508 clang_analyzer_express(x); // expected-warning {{$x - 1}}
509 clang_analyzer_express(y); // expected-warning {{$x - 1}}
510 clang_analyzer_eval(x < y); // expected-warning {{FALSE}}
511 }
512
compare_different_symbol_equal_unsigned()513 void compare_different_symbol_equal_unsigned() {
514 unsigned x = f(), y = f();
515 clang_analyzer_denote(x, "$x");
516 clang_analyzer_denote(y, "$y");
517 clang_analyzer_express(y); // expected-warning {{$y}}
518 clang_analyzer_express(x == y); // expected-warning {{$x - $y == 0}}
519 }
520
compare_different_symbol_plus_left_int_equal_unsigned()521 void compare_different_symbol_plus_left_int_equal_unsigned() {
522 unsigned x = f() + 1, y = f();
523 clang_analyzer_denote(x - 1, "$x");
524 clang_analyzer_denote(y, "$y");
525 clang_analyzer_express(x); // expected-warning {{$x + 1}}
526 clang_analyzer_express(y); // expected-warning {{$y}}
527 clang_analyzer_express(x == y); // expected-warning {{$y - $x == 1}}
528 }
529
compare_different_symbol_minus_left_int_equal_unsigned()530 void compare_different_symbol_minus_left_int_equal_unsigned() {
531 unsigned x = f() - 1, y = f();
532 clang_analyzer_denote(x + 1, "$x");
533 clang_analyzer_denote(y, "$y");
534 clang_analyzer_express(x); // expected-warning {{$x - 1}}
535 clang_analyzer_express(y); // expected-warning {{$y}}
536 clang_analyzer_express(x == y); // expected-warning {{$x - $y == 1}}
537 }
538
compare_different_symbol_plus_right_int_equal_unsigned()539 void compare_different_symbol_plus_right_int_equal_unsigned() {
540 unsigned x = f(), y = f() + 2;
541 clang_analyzer_denote(x, "$x");
542 clang_analyzer_denote(y - 2, "$y");
543 clang_analyzer_express(y); // expected-warning {{$y + 2}}
544 clang_analyzer_express(x == y); // expected-warning {{$x - $y == 2}}
545 }
546
compare_different_symbol_minus_right_int_equal_unsigned()547 void compare_different_symbol_minus_right_int_equal_unsigned() {
548 unsigned x = f(), y = f() - 2;
549 clang_analyzer_denote(x, "$x");
550 clang_analyzer_denote(y + 2, "$y");
551 clang_analyzer_express(y); // expected-warning {{$y - 2}}
552 clang_analyzer_express(x == y); // expected-warning {{$y - $x == 2}}
553 }
554
compare_different_symbol_plus_left_plus_right_int_equal_unsigned()555 void compare_different_symbol_plus_left_plus_right_int_equal_unsigned() {
556 unsigned x = f() + 2, y = f() + 1;
557 clang_analyzer_denote(x - 2, "$x");
558 clang_analyzer_denote(y - 1, "$y");
559 clang_analyzer_express(x); // expected-warning {{$x + 2}}
560 clang_analyzer_express(y); // expected-warning {{$y + 1}}
561 clang_analyzer_express(x == y); // expected-warning {{$y - $x == 1}}
562 }
563
compare_different_symbol_plus_left_minus_right_int_equal_unsigned()564 void compare_different_symbol_plus_left_minus_right_int_equal_unsigned() {
565 unsigned x = f() + 2, y = f() - 1;
566 clang_analyzer_denote(x - 2, "$x");
567 clang_analyzer_denote(y + 1, "$y");
568 clang_analyzer_express(x); // expected-warning {{$x + 2}}
569 clang_analyzer_express(y); // expected-warning {{$y - 1}}
570 clang_analyzer_express(x == y); // expected-warning {{$y - $x == 3}}
571 }
572
compare_different_symbol_minus_left_plus_right_int_equal_unsigned()573 void compare_different_symbol_minus_left_plus_right_int_equal_unsigned() {
574 unsigned x = f() - 2, y = f() + 1;
575 clang_analyzer_denote(x + 2, "$x");
576 clang_analyzer_denote(y - 1, "$y");
577 clang_analyzer_express(x); // expected-warning {{$x - 2}}
578 clang_analyzer_express(y); // expected-warning {{$y + 1}}
579 clang_analyzer_express(x == y); // expected-warning {{$x - $y == 3}}
580 }
581
compare_different_symbol_minus_left_minus_right_int_equal_unsigned()582 void compare_different_symbol_minus_left_minus_right_int_equal_unsigned() {
583 unsigned x = f() - 2, y = f() - 1;
584 clang_analyzer_denote(x + 2, "$x");
585 clang_analyzer_denote(y + 1, "$y");
586 clang_analyzer_express(x); // expected-warning {{$x - 2}}
587 clang_analyzer_express(y); // expected-warning {{$y - 1}}
588 clang_analyzer_express(x == y); // expected-warning {{$x - $y == 1}}
589 }
590
compare_same_symbol_equal_unsigned()591 void compare_same_symbol_equal_unsigned() {
592 unsigned x = f(), y = x;
593 clang_analyzer_denote(x, "$x");
594 clang_analyzer_express(y); // expected-warning {{$x}}
595 clang_analyzer_eval(x == y); // expected-warning {{TRUE}}
596 }
597
compare_same_symbol_plus_left_int_equal_unsigned()598 void compare_same_symbol_plus_left_int_equal_unsigned() {
599 unsigned x = f(), y = x;
600 clang_analyzer_denote(x, "$x");
601 ++x;
602 clang_analyzer_express(x); // expected-warning {{$x + 1}}
603 clang_analyzer_express(y); // expected-warning {{$x}}
604 clang_analyzer_express(x == y); // expected-warning {{$x + 1U == $x}}
605 }
606
compare_same_symbol_minus_left_int_equal_unsigned()607 void compare_same_symbol_minus_left_int_equal_unsigned() {
608 unsigned x = f(), y = x;
609 clang_analyzer_denote(x, "$x");
610 --x;
611 clang_analyzer_express(x); // expected-warning {{$x - 1}}
612 clang_analyzer_express(y); // expected-warning {{$x}}
613 clang_analyzer_express(x == y); // expected-warning {{$x - 1U == $x}}
614 }
615
compare_same_symbol_plus_right_int_equal_unsigned()616 void compare_same_symbol_plus_right_int_equal_unsigned() {
617 unsigned x = f(), y = x + 1;
618 clang_analyzer_denote(x, "$x");
619 clang_analyzer_express(y); // expected-warning {{$x + 1}}
620 clang_analyzer_express(x == y); // expected-warning {{$x == $x + 1U}}
621 }
622
compare_same_symbol_minus_right_int_equal_unsigned()623 void compare_same_symbol_minus_right_int_equal_unsigned() {
624 unsigned x = f(), y = x - 1;
625 clang_analyzer_denote(x, "$x");
626 clang_analyzer_express(y); // expected-warning {{$x - 1}}
627 clang_analyzer_express(x == y); // expected-warning {{$x == $x - 1U}}
628 }
629
compare_same_symbol_plus_left_plus_right_int_equal_unsigned()630 void compare_same_symbol_plus_left_plus_right_int_equal_unsigned() {
631 unsigned x = f(), y = x + 1;
632 clang_analyzer_denote(x, "$x");
633 ++x;
634 clang_analyzer_express(x); // expected-warning {{$x + 1}}
635 clang_analyzer_express(y); // expected-warning {{$x + 1}}
636 clang_analyzer_eval(x == y); // expected-warning {{TRUE}}
637 }
638
compare_same_symbol_plus_left_minus_right_int_equal_unsigned()639 void compare_same_symbol_plus_left_minus_right_int_equal_unsigned() {
640 unsigned x = f(), y = x - 1;
641 clang_analyzer_denote(x, "$x");
642 ++x;
643 clang_analyzer_express(x); // expected-warning {{$x + 1}}
644 clang_analyzer_express(y); // expected-warning {{$x - 1}}
645 clang_analyzer_express(x == y); // expected-warning {{$x + 1U == $x - 1U}}
646 }
647
compare_same_symbol_minus_left_plus_right_int_equal_unsigned()648 void compare_same_symbol_minus_left_plus_right_int_equal_unsigned() {
649 unsigned x = f(), y = x + 1;
650 clang_analyzer_denote(x, "$x");
651 --x;
652 clang_analyzer_express(x); // expected-warning {{$x - 1}}
653 clang_analyzer_express(y); // expected-warning {{$x + 1}}
654 clang_analyzer_express(x == y); // expected-warning {{$x - 1U == $x + 1U}}
655 }
656
compare_same_symbol_minus_left_minus_right_int_equal_unsigned()657 void compare_same_symbol_minus_left_minus_right_int_equal_unsigned() {
658 unsigned x = f(), y = x - 1;
659 clang_analyzer_denote(x, "$x");
660 --x;
661 clang_analyzer_express(x); // expected-warning {{$x - 1}}
662 clang_analyzer_express(y); // expected-warning {{$x - 1}}
663 clang_analyzer_eval(x == y); // expected-warning {{TRUE}}
664 }
665
compare_different_symbol_less_or_equal_unsigned()666 void compare_different_symbol_less_or_equal_unsigned() {
667 unsigned x = f(), y = f();
668 clang_analyzer_denote(x, "$x");
669 clang_analyzer_denote(y, "$y");
670 clang_analyzer_express(y); // expected-warning {{$y}}
671 clang_analyzer_express(x <= y); // expected-warning {{$x - $y <= 0}}
672 }
673
compare_different_symbol_plus_left_int_less_or_equal_unsigned()674 void compare_different_symbol_plus_left_int_less_or_equal_unsigned() {
675 unsigned x = f() + 1, y = f();
676 clang_analyzer_denote(x - 1, "$x");
677 clang_analyzer_denote(y, "$y");
678 clang_analyzer_express(x); // expected-warning {{$x + 1}}
679 clang_analyzer_express(y); // expected-warning {{$y}}
680 clang_analyzer_express(x <= y); // expected-warning {{$y - $x >= 1}}
681 }
682
compare_different_symbol_minus_left_int_less_or_equal_unsigned()683 void compare_different_symbol_minus_left_int_less_or_equal_unsigned() {
684 unsigned x = f() - 1, y = f();
685 clang_analyzer_denote(x + 1, "$x");
686 clang_analyzer_denote(y, "$y");
687 clang_analyzer_express(x); // expected-warning {{$x - 1}}
688 clang_analyzer_express(y); // expected-warning {{$y}}
689 clang_analyzer_express(x <= y); // expected-warning {{$x - $y <= 1}}
690 }
691
compare_different_symbol_plus_right_int_less_or_equal_unsigned()692 void compare_different_symbol_plus_right_int_less_or_equal_unsigned() {
693 unsigned x = f(), y = f() + 2;
694 clang_analyzer_denote(x, "$x");
695 clang_analyzer_denote(y - 2, "$y");
696 clang_analyzer_express(y); // expected-warning {{$y + 2}}
697 clang_analyzer_express(x <= y); // expected-warning {{$x - $y <= 2}}
698 }
699
compare_different_symbol_minus_right_int_less_or_equal_unsigned()700 void compare_different_symbol_minus_right_int_less_or_equal_unsigned() {
701 unsigned x = f(), y = f() - 2;
702 clang_analyzer_denote(x, "$x");
703 clang_analyzer_denote(y + 2, "$y");
704 clang_analyzer_express(y); // expected-warning {{$y - 2}}
705 clang_analyzer_express(x <= y); // expected-warning {{$y - $x >= 2}}
706 }
707
compare_different_symbol_plus_left_plus_right_int_less_or_equal_unsigned()708 void compare_different_symbol_plus_left_plus_right_int_less_or_equal_unsigned() {
709 unsigned x = f() + 2, y = f() + 1;
710 clang_analyzer_denote(x - 2, "$x");
711 clang_analyzer_denote(y - 1, "$y");
712 clang_analyzer_express(x); // expected-warning {{$x + 2}}
713 clang_analyzer_express(y); // expected-warning {{$y + 1}}
714 clang_analyzer_express(x <= y); // expected-warning {{$y - $x >= 1}}
715 }
716
compare_different_symbol_plus_left_minus_right_int_less_or_equal_unsigned()717 void compare_different_symbol_plus_left_minus_right_int_less_or_equal_unsigned() {
718 unsigned x = f() + 2, y = f() - 1;
719 clang_analyzer_denote(x - 2, "$x");
720 clang_analyzer_denote(y + 1, "$y");
721 clang_analyzer_express(x); // expected-warning {{$x + 2}}
722 clang_analyzer_express(y); // expected-warning {{$y - 1}}
723 clang_analyzer_express(x <= y); // expected-warning {{$y - $x >= 3}}
724 }
725
compare_different_symbol_minus_left_plus_right_int_less_or_equal_unsigned()726 void compare_different_symbol_minus_left_plus_right_int_less_or_equal_unsigned() {
727 unsigned x = f() - 2, y = f() + 1;
728 clang_analyzer_denote(x + 2, "$x");
729 clang_analyzer_denote(y - 1, "$y");
730 clang_analyzer_express(x); // expected-warning {{$x - 2}}
731 clang_analyzer_express(y); // expected-warning {{$y + 1}}
732 clang_analyzer_express(x <= y); // expected-warning {{$x - $y <= 3}}
733 }
734
compare_different_symbol_minus_left_minus_right_int_less_or_equal_unsigned()735 void compare_different_symbol_minus_left_minus_right_int_less_or_equal_unsigned() {
736 unsigned x = f() - 2, y = f() - 1;
737 clang_analyzer_denote(x + 2, "$x");
738 clang_analyzer_denote(y + 1, "$y");
739 clang_analyzer_express(x); // expected-warning {{$x - 2}}
740 clang_analyzer_express(y); // expected-warning {{$y - 1}}
741 clang_analyzer_express(x <= y); // expected-warning {{$x - $y <= 1}}
742 }
743
compare_same_symbol_less_or_equal_unsigned()744 void compare_same_symbol_less_or_equal_unsigned() {
745 unsigned x = f(), y = x;
746 clang_analyzer_denote(x, "$x");
747 clang_analyzer_express(y); // expected-warning {{$x}}
748 clang_analyzer_eval(x <= y); // expected-warning {{TRUE}}
749 }
750
compare_same_symbol_plus_left_int_less_or_equal_unsigned()751 void compare_same_symbol_plus_left_int_less_or_equal_unsigned() {
752 unsigned x = f(), y = x;
753 clang_analyzer_denote(x, "$x");
754 ++x;
755 clang_analyzer_express(x); // expected-warning {{$x + 1}}
756 clang_analyzer_express(y); // expected-warning {{$x}}
757 clang_analyzer_express(x <= y); // expected-warning {{$x + 1U <= $x}}
758 }
759
compare_same_symbol_minus_left_int_less_or_equal_unsigned()760 void compare_same_symbol_minus_left_int_less_or_equal_unsigned() {
761 unsigned x = f(), y = x;
762 clang_analyzer_denote(x, "$x");
763 --x;
764 clang_analyzer_express(x); // expected-warning {{$x - 1}}
765 clang_analyzer_express(y); // expected-warning {{$x}}
766 clang_analyzer_express(x <= y); // expected-warning {{$x - 1U <= $x}}
767 }
768
compare_same_symbol_plus_right_int_less_or_equal_unsigned()769 void compare_same_symbol_plus_right_int_less_or_equal_unsigned() {
770 unsigned x = f(), y = x + 1;
771 clang_analyzer_denote(x, "$x");
772 clang_analyzer_express(y); // expected-warning {{$x + 1}}
773 clang_analyzer_express(x <= y); // expected-warning {{$x <= $x + 1U}}
774 }
775
compare_same_symbol_minus_right_int_less_or_equal_unsigned()776 void compare_same_symbol_minus_right_int_less_or_equal_unsigned() {
777 unsigned x = f(), y = x - 1;
778 clang_analyzer_denote(x, "$x");
779 clang_analyzer_express(y); // expected-warning {{$x - 1}}
780 clang_analyzer_express(x <= y); // expected-warning {{$x <= $x - 1U}}
781 }
782
compare_same_symbol_plus_left_plus_right_int_less_or_equal_unsigned()783 void compare_same_symbol_plus_left_plus_right_int_less_or_equal_unsigned() {
784 unsigned x = f(), y = x + 1;
785 clang_analyzer_denote(x, "$x");
786 ++x;
787 clang_analyzer_express(x); // expected-warning {{$x + 1}}
788 clang_analyzer_express(y); // expected-warning {{$x + 1}}
789 clang_analyzer_eval(x <= y); // expected-warning {{TRUE}}
790 }
791
compare_same_symbol_plus_left_minus_right_int_less_or_equal_unsigned()792 void compare_same_symbol_plus_left_minus_right_int_less_or_equal_unsigned() {
793 unsigned x = f(), y = x - 1;
794 clang_analyzer_denote(x, "$x");
795 ++x;
796 clang_analyzer_express(x); // expected-warning {{$x + 1}}
797 clang_analyzer_express(y); // expected-warning {{$x - 1}}
798 clang_analyzer_express(x <= y); // expected-warning {{$x + 1U <= $x - 1U}}
799 }
800
compare_same_symbol_minus_left_plus_right_int_less_or_equal_unsigned()801 void compare_same_symbol_minus_left_plus_right_int_less_or_equal_unsigned() {
802 unsigned x = f(), y = x + 1;
803 clang_analyzer_denote(x, "$x");
804 --x;
805 clang_analyzer_express(x); // expected-warning {{$x - 1}}
806 clang_analyzer_express(y); // expected-warning {{$x + 1}}
807 clang_analyzer_express(x <= y); // expected-warning {{$x - 1U <= $x + 1U}}
808 }
809
compare_same_symbol_minus_left_minus_right_int_less_or_equal_unsigned()810 void compare_same_symbol_minus_left_minus_right_int_less_or_equal_unsigned() {
811 unsigned x = f(), y = x - 1;
812 clang_analyzer_denote(x, "$x");
813 --x;
814 clang_analyzer_express(x); // expected-warning {{$x - 1}}
815 clang_analyzer_express(y); // expected-warning {{$x - 1}}
816 clang_analyzer_eval(x <= y); // expected-warning {{TRUE}}
817 }
818
compare_different_symbol_less_unsigned()819 void compare_different_symbol_less_unsigned() {
820 unsigned x = f(), y = f();
821 clang_analyzer_denote(x, "$x");
822 clang_analyzer_denote(y, "$y");
823 clang_analyzer_express(y); // expected-warning {{$y}}
824 clang_analyzer_express(x < y); // expected-warning {{$x - $y < 0}}
825 }
826
compare_different_symbol_plus_left_int_less_unsigned()827 void compare_different_symbol_plus_left_int_less_unsigned() {
828 unsigned x = f() + 1, y = f();
829 clang_analyzer_denote(x - 1, "$x");
830 clang_analyzer_denote(y, "$y");
831 clang_analyzer_express(x); // expected-warning {{$x + 1}}
832 clang_analyzer_express(y); // expected-warning {{$y}}
833 clang_analyzer_express(x < y); // expected-warning {{$y - $x > 1}}
834 }
835
compare_different_symbol_minus_left_int_less_unsigned()836 void compare_different_symbol_minus_left_int_less_unsigned() {
837 unsigned x = f() - 1, y = f();
838 clang_analyzer_denote(x + 1, "$x");
839 clang_analyzer_denote(y, "$y");
840 clang_analyzer_express(x); // expected-warning {{$x - 1}}
841 clang_analyzer_express(y); // expected-warning {{$y}}
842 clang_analyzer_express(x < y); // expected-warning {{$x - $y < 1}}
843 }
844
compare_different_symbol_plus_right_int_less_unsigned()845 void compare_different_symbol_plus_right_int_less_unsigned() {
846 unsigned x = f(), y = f() + 2;
847 clang_analyzer_denote(x, "$x");
848 clang_analyzer_denote(y - 2, "$y");
849 clang_analyzer_express(y); // expected-warning {{$y + 2}}
850 clang_analyzer_express(x < y); // expected-warning {{$x - $y < 2}}
851 }
852
compare_different_symbol_minus_right_int_less_unsigned()853 void compare_different_symbol_minus_right_int_less_unsigned() {
854 unsigned x = f(), y = f() - 2;
855 clang_analyzer_denote(x, "$x");
856 clang_analyzer_denote(y + 2, "$y");
857 clang_analyzer_express(y); // expected-warning {{$y - 2}}
858 clang_analyzer_express(x < y); // expected-warning {{$y - $x > 2}}
859 }
860
compare_different_symbol_plus_left_plus_right_int_less_unsigned()861 void compare_different_symbol_plus_left_plus_right_int_less_unsigned() {
862 unsigned x = f() + 2, y = f() + 1;
863 clang_analyzer_denote(x - 2, "$x");
864 clang_analyzer_denote(y - 1, "$y");
865 clang_analyzer_express(x); // expected-warning {{$x + 2}}
866 clang_analyzer_express(y); // expected-warning {{$y + 1}}
867 clang_analyzer_express(x < y); // expected-warning {{$y - $x > 1}}
868 }
869
compare_different_symbol_plus_left_minus_right_int_less_unsigned()870 void compare_different_symbol_plus_left_minus_right_int_less_unsigned() {
871 unsigned x = f() + 2, y = f() - 1;
872 clang_analyzer_denote(x - 2, "$x");
873 clang_analyzer_denote(y + 1, "$y");
874 clang_analyzer_express(x); // expected-warning {{$x + 2}}
875 clang_analyzer_express(y); // expected-warning {{$y - 1}}
876 clang_analyzer_express(x < y); // expected-warning {{$y - $x > 3}}
877 }
878
compare_different_symbol_minus_left_plus_right_int_less_unsigned()879 void compare_different_symbol_minus_left_plus_right_int_less_unsigned() {
880 unsigned x = f() - 2, y = f() + 1;
881 clang_analyzer_denote(x + 2, "$x");
882 clang_analyzer_denote(y - 1, "$y");
883 clang_analyzer_express(x); // expected-warning {{$x - 2}}
884 clang_analyzer_express(y); // expected-warning {{$y + 1}}
885 clang_analyzer_express(x < y); // expected-warning {{$x - $y < 3}}
886 }
887
compare_different_symbol_minus_left_minus_right_int_less_unsigned()888 void compare_different_symbol_minus_left_minus_right_int_less_unsigned() {
889 unsigned x = f() - 2, y = f() - 1;
890 clang_analyzer_denote(x + 2, "$x");
891 clang_analyzer_denote(y + 1, "$y");
892 clang_analyzer_express(x); // expected-warning {{$x - 2}}
893 clang_analyzer_express(y); // expected-warning {{$y - 1}}
894 clang_analyzer_express(x < y); // expected-warning {{$x - $y < 1}}
895 }
896
compare_same_symbol_less_unsigned()897 void compare_same_symbol_less_unsigned() {
898 unsigned x = f(), y = x;
899 clang_analyzer_denote(x, "$x");
900 clang_analyzer_express(y); // expected-warning {{$x}}
901 clang_analyzer_eval(x < y); // expected-warning {{FALSE}}
902 }
903
compare_same_symbol_plus_left_int_less_unsigned()904 void compare_same_symbol_plus_left_int_less_unsigned() {
905 unsigned x = f(), y = x;
906 clang_analyzer_denote(x, "$x");
907 ++x;
908 clang_analyzer_express(x); // expected-warning {{$x + 1}}
909 clang_analyzer_express(y); // expected-warning {{$x}}
910 clang_analyzer_express(x < y); // expected-warning {{$x + 1U < $x}}
911 }
912
compare_same_symbol_minus_left_int_less_unsigned()913 void compare_same_symbol_minus_left_int_less_unsigned() {
914 unsigned x = f(), y = x;
915 clang_analyzer_denote(x, "$x");
916 --x;
917 clang_analyzer_express(x); // expected-warning {{$x - 1}}
918 clang_analyzer_express(y); // expected-warning {{$x}}
919 clang_analyzer_express(x < y); // expected-warning {{$x - 1U < $x}}
920 }
921
compare_same_symbol_plus_right_int_less_unsigned()922 void compare_same_symbol_plus_right_int_less_unsigned() {
923 unsigned x = f(), y = x + 1;
924 clang_analyzer_denote(x, "$x");
925 clang_analyzer_express(y); // expected-warning {{$x + 1}}
926 clang_analyzer_express(x < y); // expected-warning {{$x < $x + 1U}}
927 }
928
compare_same_symbol_minus_right_int_less_unsigned()929 void compare_same_symbol_minus_right_int_less_unsigned() {
930 unsigned x = f(), y = x - 1;
931 clang_analyzer_denote(x, "$x");
932 clang_analyzer_express(y); // expected-warning {{$x - 1}}
933 clang_analyzer_express(x < y); // expected-warning {{$x < $x - 1U}}
934 }
935
compare_same_symbol_plus_left_plus_right_int_less_unsigned()936 void compare_same_symbol_plus_left_plus_right_int_less_unsigned() {
937 unsigned x = f(), y = x + 1;
938 clang_analyzer_denote(x, "$x");
939 ++x;
940 clang_analyzer_express(x); // expected-warning {{$x + 1}}
941 clang_analyzer_express(y); // expected-warning {{$x + 1}}
942 clang_analyzer_eval(x < y); // expected-warning {{FALSE}}
943 }
944
compare_same_symbol_plus_left_minus_right_int_less_unsigned()945 void compare_same_symbol_plus_left_minus_right_int_less_unsigned() {
946 unsigned x = f(), y = x - 1;
947 clang_analyzer_denote(x, "$x");
948 ++x;
949 clang_analyzer_express(x); // expected-warning {{$x + 1}}
950 clang_analyzer_express(y); // expected-warning {{$x - 1}}
951 clang_analyzer_express(x < y); // expected-warning {{$x + 1U < $x - 1U}}
952 }
953
compare_same_symbol_minus_left_plus_right_int_less_unsigned()954 void compare_same_symbol_minus_left_plus_right_int_less_unsigned() {
955 unsigned x = f(), y = x + 1;
956 clang_analyzer_denote(x, "$x");
957 --x;
958 clang_analyzer_express(x); // expected-warning {{$x - 1}}
959 clang_analyzer_express(y); // expected-warning {{$x + 1}}
960 clang_analyzer_express(x < y); // expected-warning {{$x - 1U < $x + 1U}}
961 }
962
compare_same_symbol_minus_left_minus_right_int_less_unsigned()963 void compare_same_symbol_minus_left_minus_right_int_less_unsigned() {
964 unsigned x = f(), y = x - 1;
965 clang_analyzer_denote(x, "$x");
966 --x;
967 clang_analyzer_express(x); // expected-warning {{$x - 1}}
968 clang_analyzer_express(y); // expected-warning {{$x - 1}}
969 clang_analyzer_eval(x < y); // expected-warning {{FALSE}}
970 }
971
overflow(signed char n,signed char m)972 void overflow(signed char n, signed char m) {
973 if (n + 0 > m + 0) {
974 clang_analyzer_eval(n - 126 == m + 3); // expected-warning {{UNKNOWN}}
975 }
976 }
977
mixed_integer_types(int x,int y)978 int mixed_integer_types(int x, int y) {
979 short a = x - 1U;
980 return a - y;
981 }
982
983 unsigned gu();
fu()984 unsigned fu() {
985 unsigned x = gu();
986 // Assert that no overflows occur in this test file.
987 // Assuming that concrete integers are also within that range.
988 assert(x <= ((unsigned)UINT_MAX / 4));
989 return x;
990 }
991
unsigned_concrete_int_no_crash()992 void unsigned_concrete_int_no_crash() {
993 unsigned x = fu() + 1U, y = fu() + 1U;
994 clang_analyzer_denote(x - 1U, "$x");
995 clang_analyzer_denote(y - 1U, "$y");
996 clang_analyzer_express(y); // expected-warning {{$y}}
997 clang_analyzer_express(x == y); // expected-warning {{$x + 1U == $y + 1U}}
998 }
999