[RISCV] Simplify usage of SplatPat_simm5_plus1. NFC (#125340)
[llvm-project.git] / clang / test / Analysis / stl-algorithm-modeling-aggressive-std-find-modeling.cpp
blob191af95cd2b9c22445abcf28b8c532e4020f99da
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: -analyzer-config alpha.cplusplus.STLAlgorithmModeling:AggressiveStdFindModeling=true\
5 // RUN: -verify
7 // STLAlgorithmModeling and DebugIteratorModeling are probably bugged because
8 // these tests started failing after we just directly copy the symbol
9 // representing the value of a variable instead of creating a LazyCompoundVal
10 // of that single conjured value.
11 // In theory, it shouldn't matter if we eagerly copy the value that we would
12 // "load" from the LCV once requested or just directly binding the backing symbol.
13 // Yet, these tests fail, so there is likely messed up how/what the checker
14 // metadata is associated with.
15 // XFAIL: *
17 #include "Inputs/system-header-simulator-cxx.h"
19 void clang_analyzer_eval(bool);
21 template <typename Iterator>
22 long clang_analyzer_iterator_position(const Iterator&);
24 template <typename Iter> Iter return_any_iterator(const Iter &It);
26 void test_find1(std::vector<int> V, int n) {
27 const auto i1 = return_any_iterator(V.begin());
28 const auto i2 = return_any_iterator(V.begin());
30 const auto i3 = std::find(i1, i2, n);
32 clang_analyzer_eval(i3 == i2); // expected-warning{{TRUE}} expected-warning{{FALSE}}
34 if (i3 != i2) {
35 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
36 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
37 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
38 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
40 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
41 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
42 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
43 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
47 void test_find2(std::vector<int> V, int n) {
48 const auto i1 = return_any_iterator(V.begin());
49 const auto i2 = return_any_iterator(V.begin());
51 const auto i3 = std::find(std::execution::sequenced_policy(), i1, i2, n);
53 clang_analyzer_eval(i3 == i2); // expected-warning{{TRUE}} expected-warning{{FALSE}}
55 if (i3 != i2) {
56 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
57 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
58 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
59 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
61 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
62 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
63 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
64 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
68 bool odd(int i) { return i % 2; }
70 void test_find_if1(std::vector<int> V) {
71 const auto i1 = return_any_iterator(V.begin());
72 const auto i2 = return_any_iterator(V.begin());
74 const auto i3 = std::find_if(i1, i2, odd);
76 clang_analyzer_eval(i3 == i2); // expected-warning{{TRUE}} expected-warning{{FALSE}}
78 if (i3 != i2) {
79 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
80 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
81 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
82 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
84 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
85 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
86 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
87 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
91 void test_find_if2(std::vector<int> V) {
92 const auto i1 = return_any_iterator(V.begin());
93 const auto i2 = return_any_iterator(V.begin());
95 const auto i3 = std::find_if(std::execution::sequenced_policy(), i1, i2, odd);
97 clang_analyzer_eval(i3 == i2); // expected-warning{{TRUE}} expected-warning{{FALSE}}
99 if (i3 != i2) {
100 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
101 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
102 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
103 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
105 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
106 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
107 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
108 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
112 void test_find_if_not1(std::vector<int> V) {
113 const auto i1 = return_any_iterator(V.begin());
114 const auto i2 = return_any_iterator(V.begin());
116 const auto i3 = std::find_if_not(i1, i2, odd);
118 clang_analyzer_eval(i3 == i2); // expected-warning{{TRUE}} expected-warning{{FALSE}}
120 if (i3 != i2) {
121 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
122 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
123 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
124 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
126 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
127 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
128 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
129 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
133 void test_find_if_not2(std::vector<int> V) {
134 const auto i1 = return_any_iterator(V.begin());
135 const auto i2 = return_any_iterator(V.begin());
137 const auto i3 = std::find_if_not(std::execution::sequenced_policy(), i1, i2,
138 odd);
140 clang_analyzer_eval(i3 == i2); // expected-warning{{TRUE}} expected-warning{{FALSE}}
142 if (i3 != i2) {
143 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
144 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
145 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
146 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
148 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
149 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
150 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
151 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
155 void test_find_first_of1(std::vector<int> V1, std::vector<int> V2) {
156 const auto i1 = return_any_iterator(V1.begin());
157 const auto i2 = return_any_iterator(V1.begin());
158 const auto i3 = return_any_iterator(V2.begin());
159 const auto i4 = return_any_iterator(V2.begin());
161 const auto i5 = std::find_first_of(i1, i2, i3, i4);
163 clang_analyzer_eval(i5 == i2); // expected-warning{{TRUE}} expected-warning{{FALSE}}
165 if (i5 != i2) {
166 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
167 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
168 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
169 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
171 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
172 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
173 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
174 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
178 void test_find_first_of2(std::vector<int> V1, std::vector<int> V2) {
179 const auto i1 = return_any_iterator(V1.begin());
180 const auto i2 = return_any_iterator(V1.begin());
181 const auto i3 = return_any_iterator(V2.begin());
182 const auto i4 = return_any_iterator(V2.begin());
184 const auto i5 = std::find_first_of(std::execution::sequenced_policy(),
185 i1, i2, i3, i4);
187 clang_analyzer_eval(i5 == i2); // expected-warning{{TRUE}} expected-warning{{FALSE}}
189 if (i5 != i2) {
190 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
191 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
192 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
193 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
195 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
196 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
197 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
198 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
202 void test_find_first_of3(std::vector<int> V1, std::vector<int> V2) {
203 const auto i1 = return_any_iterator(V1.begin());
204 const auto i2 = return_any_iterator(V1.begin());
205 const auto i3 = return_any_iterator(V2.begin());
206 const auto i4 = return_any_iterator(V2.begin());
208 const auto i5 = std::find_first_of(i1, i2, i3, i4, odd);
210 clang_analyzer_eval(i5 == i2); // expected-warning{{TRUE}} expected-warning{{FALSE}}
212 if (i5 != i2) {
213 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
214 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
215 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
216 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
218 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
219 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
220 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
221 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
225 void test_find_first_of4(std::vector<int> V1, std::vector<int> V2) {
226 const auto i1 = return_any_iterator(V1.begin());
227 const auto i2 = return_any_iterator(V1.begin());
228 const auto i3 = return_any_iterator(V2.begin());
229 const auto i4 = return_any_iterator(V2.begin());
231 const auto i5 = std::find_first_of(std::execution::sequenced_policy(),
232 i1, i2, i3, i4, odd);
234 clang_analyzer_eval(i5 == i2); // expected-warning{{TRUE}} expected-warning{{FALSE}}
236 if (i5 != i2) {
237 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
238 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
239 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
240 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
242 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
243 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
244 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
245 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
249 void test_find_end1(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(i1, i2, i3, i4);
257 clang_analyzer_eval(i5 == i2); // expected-warning{{TRUE}} expected-warning{{FALSE}}
259 if (i5 != i2) {
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}}
272 void test_find_end2(std::vector<int> V1, std::vector<int> V2) {
273 const auto i1 = return_any_iterator(V1.begin());
274 const auto i2 = return_any_iterator(V1.begin());
275 const auto i3 = return_any_iterator(V2.begin());
276 const auto i4 = return_any_iterator(V2.begin());
278 const auto i5 = std::find_end(std::execution::sequenced_policy(),
279 i1, i2, i3, i4);
281 clang_analyzer_eval(i5 == i2); // expected-warning{{TRUE}} expected-warning{{FALSE}}
283 if (i5 != i2) {
284 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
285 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
286 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
287 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
289 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
290 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
291 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
292 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
296 void test_find_end3(std::vector<int> V1, std::vector<int> V2) {
297 const auto i1 = return_any_iterator(V1.begin());
298 const auto i2 = return_any_iterator(V1.begin());
299 const auto i3 = return_any_iterator(V2.begin());
300 const auto i4 = return_any_iterator(V2.begin());
302 const auto i5 = std::find_end(i1, i2, i3, i4, odd);
304 clang_analyzer_eval(i5 == i2); // expected-warning{{TRUE}} expected-warning{{FALSE}}
306 if (i5 != i2) {
307 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
308 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
309 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
310 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
312 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
313 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
314 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
315 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
319 void test_find_end4(std::vector<int> V1, std::vector<int> V2) {
320 const auto i1 = return_any_iterator(V1.begin());
321 const auto i2 = return_any_iterator(V1.begin());
322 const auto i3 = return_any_iterator(V2.begin());
323 const auto i4 = return_any_iterator(V2.begin());
325 const auto i5 = std::find_end(std::execution::sequenced_policy(),
326 i1, i2, i3, i4, odd);
328 clang_analyzer_eval(i5 == i2); // expected-warning{{TRUE}} expected-warning{{FALSE}}
330 if (i5 != i2) {
331 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
332 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
333 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
334 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
336 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
337 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
338 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
339 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
343 bool compare(int, int);
345 void test_lower_bound1(std::vector<int> V, int n) {
346 const auto i1 = return_any_iterator(V.begin());
347 const auto i2 = return_any_iterator(V.begin());
349 const auto i3 = std::lower_bound(i1, i2, n);
351 clang_analyzer_eval(i3 == i2); // expected-warning{{TRUE}} expected-warning{{FALSE}}
353 if (i3 != i2) {
354 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
355 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
356 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
357 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
359 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
360 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
361 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
362 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
366 void test_lower_bound2(std::vector<int> V, int n) {
367 const auto i1 = return_any_iterator(V.begin());
368 const auto i2 = return_any_iterator(V.begin());
370 const auto i3 = std::lower_bound(i1, i2, n, compare);
372 clang_analyzer_eval(i3 == i2); // expected-warning{{TRUE}} expected-warning{{FALSE}}
374 if (i3 != i2) {
375 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
376 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
377 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
378 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
380 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
381 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
382 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
383 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
387 void test_upper_bound1(std::vector<int> V, int n) {
388 const auto i1 = return_any_iterator(V.begin());
389 const auto i2 = return_any_iterator(V.begin());
391 const auto i3 = std::upper_bound(i1, i2, n);
393 clang_analyzer_eval(i3 == i2); // expected-warning{{TRUE}} expected-warning{{FALSE}}
395 if (i3 != i2) {
396 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
397 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
398 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
399 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
401 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
402 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
403 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
404 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
408 void test_upper_bound2(std::vector<int> V, int n) {
409 const auto i1 = return_any_iterator(V.begin());
410 const auto i2 = return_any_iterator(V.begin());
412 const auto i3 = std::upper_bound(i1, i2, n, compare);
414 clang_analyzer_eval(i3 == i2); // expected-warning{{TRUE}} expected-warning{{FALSE}}
416 if (i3 != i2) {
417 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
418 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
419 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
420 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
422 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
423 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
424 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
425 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
429 void test_search1(std::vector<int> V1, std::vector<int> V2) {
430 const auto i1 = return_any_iterator(V1.begin());
431 const auto i2 = return_any_iterator(V1.begin());
432 const auto i3 = return_any_iterator(V2.begin());
433 const auto i4 = return_any_iterator(V2.begin());
435 const auto i5 = std::search(i1, i2, i3, i4);
437 clang_analyzer_eval(i5 == i2); // expected-warning{{TRUE}} expected-warning{{FALSE}}
439 if (i5 != i2) {
440 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
441 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
442 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
443 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
445 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
446 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
447 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
448 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
452 void test_search2(std::vector<int> V1, std::vector<int> V2) {
453 const auto i1 = return_any_iterator(V1.begin());
454 const auto i2 = return_any_iterator(V1.begin());
455 const auto i3 = return_any_iterator(V2.begin());
456 const auto i4 = return_any_iterator(V2.begin());
458 const auto i5 = std::search(std::execution::sequenced_policy(),
459 i1, i2, i3, i4);
461 clang_analyzer_eval(i5 == i2); // expected-warning{{TRUE}} expected-warning{{FALSE}}
463 if (i5 != i2) {
464 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
465 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
466 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
467 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
469 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
470 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
471 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
472 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
476 void test_search3(std::vector<int> V1, std::vector<int> V2) {
477 const auto i1 = return_any_iterator(V1.begin());
478 const auto i2 = return_any_iterator(V1.begin());
479 const auto i3 = return_any_iterator(V2.begin());
480 const auto i4 = return_any_iterator(V2.begin());
482 const auto i5 = std::search(i1, i2, i3, i4, odd);
484 clang_analyzer_eval(i5 == i2); // expected-warning{{TRUE}} expected-warning{{FALSE}}
486 if (i5 != i2) {
487 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
488 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
489 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
490 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
492 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
493 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
494 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
495 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
499 void test_search4(std::vector<int> V1, std::vector<int> V2) {
500 const auto i1 = return_any_iterator(V1.begin());
501 const auto i2 = return_any_iterator(V1.begin());
502 const auto i3 = return_any_iterator(V2.begin());
503 const auto i4 = return_any_iterator(V2.begin());
505 const auto i5 = std::search(std::execution::sequenced_policy(),
506 i1, i2, i3, i4, odd);
508 clang_analyzer_eval(i5 == i2); // expected-warning{{TRUE}} expected-warning{{FALSE}}
510 if (i5 != i2) {
511 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
512 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
513 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
514 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
516 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
517 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
518 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
519 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
523 void test_search5(std::vector<int> V1, std::vector<int> V2) {
524 const auto i1 = return_any_iterator(V1.begin());
525 const auto i2 = return_any_iterator(V1.begin());
526 const auto i3 = return_any_iterator(V2.begin());
527 const auto i4 = return_any_iterator(V2.begin());
529 const auto i5 = std::search(i1, i2, std::default_searcher(i3, i4));
531 clang_analyzer_eval(i5 == i2); // expected-warning{{TRUE}} expected-warning{{FALSE}}
533 if (i5 != i2) {
534 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
535 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
536 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
537 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
539 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <
540 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
541 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=
542 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
546 void test_search_n1(std::vector<int> V, int n) {
547 const auto i1 = return_any_iterator(V.begin());
548 const auto i2 = return_any_iterator(V.begin());
550 const auto i3 = std::search_n(i1, i2, 2, n);
552 clang_analyzer_eval(i3 == i2); // expected-warning{{TRUE}} expected-warning{{FALSE}}
554 if (i3 != i2) {
555 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
556 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
557 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
558 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
560 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
561 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
562 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
563 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
567 void test_search_n2(std::vector<int> V, int n) {
568 const auto i1 = return_any_iterator(V.begin());
569 const auto i2 = return_any_iterator(V.begin());
571 const auto i3 = std::search_n(std::execution::sequenced_policy(),
572 i1, i2, 2, n);
574 clang_analyzer_eval(i3 == i2); // expected-warning{{TRUE}} expected-warning{{FALSE}}
576 if (i3 != i2) {
577 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
578 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
579 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
580 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
582 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
583 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
584 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
585 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
589 void test_search_n3(std::vector<int> V, int n) {
590 const auto i1 = return_any_iterator(V.begin());
591 const auto i2 = return_any_iterator(V.begin());
593 const auto i3 = std::search_n(i1, i2, 2, n, compare);
595 clang_analyzer_eval(i3 == i2); // expected-warning{{TRUE}} expected-warning{{FALSE}}
597 if (i3 != i2) {
598 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
599 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
600 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
601 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
603 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
604 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
605 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
606 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}
610 void test_search_n4(std::vector<int> V, int n) {
611 const auto i1 = return_any_iterator(V.begin());
612 const auto i2 = return_any_iterator(V.begin());
614 const auto i3 = std::search_n(std::execution::sequenced_policy(),
615 i1, i2, 2, n, compare);
617 clang_analyzer_eval(i3 == i2); // expected-warning{{TRUE}} expected-warning{{FALSE}}
619 if (i3 != i2) {
620 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
621 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}
622 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
623 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}
625 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <
626 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}
627 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=
628 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}