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