[RISCV] Simplify usage of SplatPat_simm5_plus1. NFC (#125340)
[llvm-project.git] / clang / test / Analysis / stl-algorithm-modeling.cpp
blobf7029c79b0942a09a136289126c8648525c16f6d
1 // RUN: %clang_analyze_cc1 -std=c++17 %s\
2 // RUN: -analyzer-checker=core,cplusplus,alpha.cplusplus.STLAlgorithmModeling,debug.DebugIteratorModeling,debug.ExprInspection\
3 // RUN: -analyzer-config aggressive-binary-operation-simplification=true\
4 // RUN: -verify
6 // STLAlgorithmModeling and DebugIteratorModeling are probably bugged because
7 // these tests started failing after we just directly copy the symbol
8 // representing the value of a variable instead of creating a LazyCompoundVal
9 // of that single conjured value.
10 // In theory, it shouldn't matter if we eagerly copy the value that we would
11 // "load" from the LCV once requested or just directly binding the backing symbol.
12 // Yet, these tests fail, so there is likely messed up how/what the checker
13 // metadata is associated with.
14 // XFAIL: *
16 #include "Inputs/system-header-simulator-cxx.h"
18 void clang_analyzer_eval(bool);
20 template <typename Iterator>
21 long clang_analyzer_iterator_position(const Iterator&);
23 template <typename Iter> Iter return_any_iterator(const Iter &It);
25 void test_find1(std::vector<int> V, int n) {
26 const auto i1 = return_any_iterator(V.begin());
27 const auto i2 = return_any_iterator(V.begin());
29 const auto i3 = std::find(i1, i2, n);
31 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}
33 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
34 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
35 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
36 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
38 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
39 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
40 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
41 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
44 void test_find2(std::vector<int> V, int n) {
45 const auto i1 = return_any_iterator(V.begin());
46 const auto i2 = return_any_iterator(V.begin());
48 const auto i3 = std::find(std::execution::sequenced_policy(), i1, i2, n);
50 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}}
52 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
53 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
54 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
55 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
57 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
58 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
59 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
60 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
63 bool odd(int i) { return i % 2; }
65 void test_find_if1(std::vector<int> V) {
66 const auto i1 = return_any_iterator(V.begin());
67 const auto i2 = return_any_iterator(V.begin());
69 const auto i3 = std::find_if(i1, i2, odd);
71 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}}
73 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
74 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
75 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
76 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
78 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
79 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
80 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
81 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
84 void test_find_if2(std::vector<int> V) {
85 const auto i1 = return_any_iterator(V.begin());
86 const auto i2 = return_any_iterator(V.begin());
88 const auto i3 = std::find_if(std::execution::sequenced_policy(), i1, i2, odd);
90 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}}
92 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
93 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
94 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
95 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
97 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
98 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
99 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
100 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
103 void test_find_if_not1(std::vector<int> V) {
104 const auto i1 = return_any_iterator(V.begin());
105 const auto i2 = return_any_iterator(V.begin());
107 const auto i3 = std::find_if_not(i1, i2, odd);
109 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}}
111 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
112 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
113 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
114 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
116 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
117 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
118 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
119 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
122 void test_find_if_not2(std::vector<int> V) {
123 const auto i1 = return_any_iterator(V.begin());
124 const auto i2 = return_any_iterator(V.begin());
126 const auto i3 = std::find_if_not(std::execution::sequenced_policy(), i1, i2,
127 odd);
129 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}}
131 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
132 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
133 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
134 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
136 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
137 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
138 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
139 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
142 void test_find_first_of1(std::vector<int> V1, std::vector<int> V2) {
143 const auto i1 = return_any_iterator(V1.begin());
144 const auto i2 = return_any_iterator(V1.begin());
145 const auto i3 = return_any_iterator(V2.begin());
146 const auto i4 = return_any_iterator(V2.begin());
148 const auto i5 = std::find_first_of(i1, i2, i3, i4);
150 clang_analyzer_eval(i5 == i2); // expected-warning{{FALSE}}}
152 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
153 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
154 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
155 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
157 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
158 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
159 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
160 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
163 void test_find_first_of2(std::vector<int> V1, std::vector<int> V2) {
164 const auto i1 = return_any_iterator(V1.begin());
165 const auto i2 = return_any_iterator(V1.begin());
166 const auto i3 = return_any_iterator(V2.begin());
167 const auto i4 = return_any_iterator(V2.begin());
169 const auto i5 = std::find_first_of(std::execution::sequenced_policy(),
170 i1, i2, i3, i4);
172 clang_analyzer_eval(i5 == i2); // expected-warning{{FALSE}}}
174 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
175 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
176 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
177 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
179 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
180 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
181 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
182 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
185 void test_find_first_of3(std::vector<int> V1, std::vector<int> V2) {
186 const auto i1 = return_any_iterator(V1.begin());
187 const auto i2 = return_any_iterator(V1.begin());
188 const auto i3 = return_any_iterator(V2.begin());
189 const auto i4 = return_any_iterator(V2.begin());
191 const auto i5 = std::find_first_of(i1, i2, i3, i4, odd);
193 clang_analyzer_eval(i5 == i2); // expected-warning{{FALSE}}}
195 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
196 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
197 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
198 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
200 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
201 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
202 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
203 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
206 void test_find_first_of4(std::vector<int> V1, std::vector<int> V2) {
207 const auto i1 = return_any_iterator(V1.begin());
208 const auto i2 = return_any_iterator(V1.begin());
209 const auto i3 = return_any_iterator(V2.begin());
210 const auto i4 = return_any_iterator(V2.begin());
212 const auto i5 = std::find_first_of(std::execution::sequenced_policy(),
213 i1, i2, i3, i4, odd);
215 clang_analyzer_eval(i5 == i2); // expected-warning{{FALSE}}}
217 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
218 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
219 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
220 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
222 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
223 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
224 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
225 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
228 void test_find_end1(std::vector<int> V1, std::vector<int> V2) {
229 const auto i1 = return_any_iterator(V1.begin());
230 const auto i2 = return_any_iterator(V1.begin());
231 const auto i3 = return_any_iterator(V2.begin());
232 const auto i4 = return_any_iterator(V2.begin());
234 const auto i5 = std::find_end(i1, i2, i3, i4);
236 clang_analyzer_eval(i5 == i2); // expected-warning{{FALSE}}}
238 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
239 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
240 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
241 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
243 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
244 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
245 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
246 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
249 void test_find_end2(std::vector<int> V1, std::vector<int> V2) {
250 const auto i1 = return_any_iterator(V1.begin());
251 const auto i2 = return_any_iterator(V1.begin());
252 const auto i3 = return_any_iterator(V2.begin());
253 const auto i4 = return_any_iterator(V2.begin());
255 const auto i5 = std::find_end(std::execution::sequenced_policy(),
256 i1, i2, i3, i4);
258 clang_analyzer_eval(i5 == i2); // expected-warning{{FALSE}}}
260 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
261 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
262 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
263 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
265 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
266 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
267 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
268 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
271 void test_find_end3(std::vector<int> V1, std::vector<int> V2) {
272 const auto i1 = return_any_iterator(V1.begin());
273 const auto i2 = return_any_iterator(V1.begin());
274 const auto i3 = return_any_iterator(V2.begin());
275 const auto i4 = return_any_iterator(V2.begin());
277 const auto i5 = std::find_end(i1, i2, i3, i4, odd);
279 clang_analyzer_eval(i5 == i2); // expected-warning{{FALSE}}}
281 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
282 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
283 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
284 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
286 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
287 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
288 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
289 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
292 void test_find_end4(std::vector<int> V1, std::vector<int> V2) {
293 const auto i1 = return_any_iterator(V1.begin());
294 const auto i2 = return_any_iterator(V1.begin());
295 const auto i3 = return_any_iterator(V2.begin());
296 const auto i4 = return_any_iterator(V2.begin());
298 const auto i5 = std::find_end(std::execution::sequenced_policy(),
299 i1, i2, i3, i4, odd);
301 clang_analyzer_eval(i5 == i2); // expected-warning{{FALSE}}}
303 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
304 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
305 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
306 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
308 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
309 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
310 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
311 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
314 bool compare(int, int);
316 void test_lower_bound1(std::vector<int> V, int n) {
317 const auto i1 = return_any_iterator(V.begin());
318 const auto i2 = return_any_iterator(V.begin());
320 const auto i3 = std::lower_bound(i1, i2, n);
322 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}}
324 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
325 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
326 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
327 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
329 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
330 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
331 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
332 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
335 void test_lower_bound2(std::vector<int> V, int n) {
336 const auto i1 = return_any_iterator(V.begin());
337 const auto i2 = return_any_iterator(V.begin());
339 const auto i3 = std::lower_bound(i1, i2, n, compare);
341 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}}
343 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
344 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
345 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
346 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
348 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
349 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
350 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
351 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
354 void test_upper_bound1(std::vector<int> V, int n) {
355 const auto i1 = return_any_iterator(V.begin());
356 const auto i2 = return_any_iterator(V.begin());
358 const auto i3 = std::upper_bound(i1, i2, n);
360 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}}
362 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
363 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
364 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
365 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
367 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
368 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
369 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
370 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
373 void test_upper_bound2(std::vector<int> V, int n) {
374 const auto i1 = return_any_iterator(V.begin());
375 const auto i2 = return_any_iterator(V.begin());
377 const auto i3 = std::upper_bound(i1, i2, n, compare);
379 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}}
381 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
382 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
383 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
384 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
386 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
387 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
388 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
389 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
392 void test_search1(std::vector<int> V1, std::vector<int> V2) {
393 const auto i1 = return_any_iterator(V1.begin());
394 const auto i2 = return_any_iterator(V1.begin());
395 const auto i3 = return_any_iterator(V2.begin());
396 const auto i4 = return_any_iterator(V2.begin());
398 const auto i5 = std::search(i1, i2, i3, i4);
400 clang_analyzer_eval(i5 == i2); // expected-warning{{FALSE}}}
402 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
403 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
404 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
405 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
407 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
408 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
409 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
410 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
413 void test_search2(std::vector<int> V1, std::vector<int> V2) {
414 const auto i1 = return_any_iterator(V1.begin());
415 const auto i2 = return_any_iterator(V1.begin());
416 const auto i3 = return_any_iterator(V2.begin());
417 const auto i4 = return_any_iterator(V2.begin());
419 const auto i5 = std::search(std::execution::sequenced_policy(),
420 i1, i2, i3, i4);
422 clang_analyzer_eval(i5 == i2); // expected-warning{{FALSE}}}
424 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
425 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
426 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
427 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
429 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
430 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
431 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
432 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
435 void test_search3(std::vector<int> V1, std::vector<int> V2) {
436 const auto i1 = return_any_iterator(V1.begin());
437 const auto i2 = return_any_iterator(V1.begin());
438 const auto i3 = return_any_iterator(V2.begin());
439 const auto i4 = return_any_iterator(V2.begin());
441 const auto i5 = std::search(i1, i2, i3, i4, odd);
443 clang_analyzer_eval(i5 == i2); // expected-warning{{FALSE}}}
445 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
446 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
447 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
448 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
450 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
451 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
452 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
453 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
456 void test_search4(std::vector<int> V1, std::vector<int> V2) {
457 const auto i1 = return_any_iterator(V1.begin());
458 const auto i2 = return_any_iterator(V1.begin());
459 const auto i3 = return_any_iterator(V2.begin());
460 const auto i4 = return_any_iterator(V2.begin());
462 const auto i5 = std::search(std::execution::sequenced_policy(),
463 i1, i2, i3, i4, odd);
465 clang_analyzer_eval(i5 == i2); // expected-warning{{FALSE}}}
467 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
468 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
469 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
470 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
472 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
473 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
474 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
475 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
478 void test_search5(std::vector<int> V1, std::vector<int> V2) {
479 const auto i1 = return_any_iterator(V1.begin());
480 const auto i2 = return_any_iterator(V1.begin());
481 const auto i3 = return_any_iterator(V2.begin());
482 const auto i4 = return_any_iterator(V2.begin());
484 const auto i5 = std::search(i1, i2, std::default_searcher(i3, i4));
486 clang_analyzer_eval(i5 == i2); // expected-warning{{FALSE}}}
488 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
489 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
490 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
491 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
493 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
494 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
495 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
496 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
499 void test_search_n1(std::vector<int> V, int n) {
500 const auto i1 = return_any_iterator(V.begin());
501 const auto i2 = return_any_iterator(V.begin());
503 const auto i3 = std::search_n(i1, i2, 2, n);
505 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}}
507 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
508 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
509 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
510 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
512 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
513 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
514 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
515 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
518 void test_search_n2(std::vector<int> V, int n) {
519 const auto i1 = return_any_iterator(V.begin());
520 const auto i2 = return_any_iterator(V.begin());
522 const auto i3 = std::search_n(std::execution::sequenced_policy(),
523 i1, i2, 2, n);
525 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}}
528 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
529 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
530 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
531 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
533 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
534 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
535 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
536 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
539 void test_search_n3(std::vector<int> V, int n) {
540 const auto i1 = return_any_iterator(V.begin());
541 const auto i2 = return_any_iterator(V.begin());
543 const auto i3 = std::search_n(i1, i2, 2, n, compare);
545 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}}
547 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
548 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
549 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
550 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
552 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
553 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
554 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
555 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
558 void test_search_n4(std::vector<int> V, int n) {
559 const auto i1 = return_any_iterator(V.begin());
560 const auto i2 = return_any_iterator(V.begin());
562 const auto i3 = std::search_n(std::execution::sequenced_policy(),
563 i1, i2, 2, n, compare);
565 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}}
567 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
568 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
569 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
570 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
572 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
573 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
574 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
575 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}