567 lines · cpp
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: -verify5 6#include "Inputs/system-header-simulator-cxx.h"7 8void clang_analyzer_eval(bool);9 10template <typename Iterator>11long clang_analyzer_iterator_position(const Iterator&);12 13template <typename Iter> Iter return_any_iterator(const Iter &It);14 15void test_find1(std::vector<int> V, int n) {16 const auto i1 = return_any_iterator(V.begin());17 const auto i2 = return_any_iterator(V.begin());18 19 const auto i3 = std::find(i1, i2, n);20 21 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}22 23 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=24 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}25 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <26 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}27 28 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <29 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}30 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=31 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}32}33 34void test_find2(std::vector<int> V, int n) {35 const auto i1 = return_any_iterator(V.begin());36 const auto i2 = return_any_iterator(V.begin());37 38 const auto i3 = std::find(std::execution::sequenced_policy(), i1, i2, n);39 40 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}}41 42 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=43 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}44 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <45 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}46 47 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <48 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}49 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=50 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}51}52 53bool odd(int i) { return i % 2; }54 55void test_find_if1(std::vector<int> V) {56 const auto i1 = return_any_iterator(V.begin());57 const auto i2 = return_any_iterator(V.begin());58 59 const auto i3 = std::find_if(i1, i2, odd);60 61 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}}62 63 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=64 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}65 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <66 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}67 68 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <69 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}70 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=71 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}72}73 74void test_find_if2(std::vector<int> V) {75 const auto i1 = return_any_iterator(V.begin());76 const auto i2 = return_any_iterator(V.begin());77 78 const auto i3 = std::find_if(std::execution::sequenced_policy(), i1, i2, odd);79 80 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}}81 82 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=83 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}84 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <85 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}86 87 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <88 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}89 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=90 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}91}92 93void test_find_if_not1(std::vector<int> V) {94 const auto i1 = return_any_iterator(V.begin());95 const auto i2 = return_any_iterator(V.begin());96 97 const auto i3 = std::find_if_not(i1, i2, odd);98 99 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}}100 101 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=102 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}103 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <104 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}105 106 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <107 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}108 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=109 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}110}111 112void test_find_if_not2(std::vector<int> V) {113 const auto i1 = return_any_iterator(V.begin());114 const auto i2 = return_any_iterator(V.begin());115 116 const auto i3 = std::find_if_not(std::execution::sequenced_policy(), i1, i2,117 odd);118 119 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}}120 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}}125 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}}130}131 132void test_find_first_of1(std::vector<int> V1, std::vector<int> V2) {133 const auto i1 = return_any_iterator(V1.begin());134 const auto i2 = return_any_iterator(V1.begin());135 const auto i3 = return_any_iterator(V2.begin());136 const auto i4 = return_any_iterator(V2.begin());137 138 const auto i5 = std::find_first_of(i1, i2, i3, i4);139 140 clang_analyzer_eval(i5 == i2); // expected-warning{{FALSE}}}141 142 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=143 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}144 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <145 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}146 147 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <148 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}149 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=150 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}151}152 153void test_find_first_of2(std::vector<int> V1, std::vector<int> V2) {154 const auto i1 = return_any_iterator(V1.begin());155 const auto i2 = return_any_iterator(V1.begin());156 const auto i3 = return_any_iterator(V2.begin());157 const auto i4 = return_any_iterator(V2.begin());158 159 const auto i5 = std::find_first_of(std::execution::sequenced_policy(),160 i1, i2, i3, i4);161 162 clang_analyzer_eval(i5 == i2); // expected-warning{{FALSE}}}163 164 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=165 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}166 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <167 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}168 169 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <170 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}171 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=172 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}173}174 175void test_find_first_of3(std::vector<int> V1, std::vector<int> V2) {176 const auto i1 = return_any_iterator(V1.begin());177 const auto i2 = return_any_iterator(V1.begin());178 const auto i3 = return_any_iterator(V2.begin());179 const auto i4 = return_any_iterator(V2.begin());180 181 const auto i5 = std::find_first_of(i1, i2, i3, i4, odd);182 183 clang_analyzer_eval(i5 == i2); // expected-warning{{FALSE}}}184 185 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=186 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}187 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <188 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}189 190 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <191 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}192 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=193 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}194}195 196void test_find_first_of4(std::vector<int> V1, std::vector<int> V2) {197 const auto i1 = return_any_iterator(V1.begin());198 const auto i2 = return_any_iterator(V1.begin());199 const auto i3 = return_any_iterator(V2.begin());200 const auto i4 = return_any_iterator(V2.begin());201 202 const auto i5 = std::find_first_of(std::execution::sequenced_policy(),203 i1, i2, i3, i4, odd);204 205 clang_analyzer_eval(i5 == i2); // expected-warning{{FALSE}}}206 207 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=208 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}209 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <210 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}211 212 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <213 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}214 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=215 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}216}217 218void test_find_end1(std::vector<int> V1, std::vector<int> V2) {219 const auto i1 = return_any_iterator(V1.begin());220 const auto i2 = return_any_iterator(V1.begin());221 const auto i3 = return_any_iterator(V2.begin());222 const auto i4 = return_any_iterator(V2.begin());223 224 const auto i5 = std::find_end(i1, i2, i3, i4);225 226 clang_analyzer_eval(i5 == i2); // expected-warning{{FALSE}}}227 228 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=229 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}230 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <231 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}232 233 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <234 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}235 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=236 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}237}238 239void test_find_end2(std::vector<int> V1, std::vector<int> V2) {240 const auto i1 = return_any_iterator(V1.begin());241 const auto i2 = return_any_iterator(V1.begin());242 const auto i3 = return_any_iterator(V2.begin());243 const auto i4 = return_any_iterator(V2.begin());244 245 const auto i5 = std::find_end(std::execution::sequenced_policy(),246 i1, i2, i3, i4);247 248 clang_analyzer_eval(i5 == i2); // expected-warning{{FALSE}}}249 250 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=251 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}252 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <253 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}254 255 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <256 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}257 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=258 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}259}260 261void test_find_end3(std::vector<int> V1, std::vector<int> V2) {262 const auto i1 = return_any_iterator(V1.begin());263 const auto i2 = return_any_iterator(V1.begin());264 const auto i3 = return_any_iterator(V2.begin());265 const auto i4 = return_any_iterator(V2.begin());266 267 const auto i5 = std::find_end(i1, i2, i3, i4, odd);268 269 clang_analyzer_eval(i5 == i2); // expected-warning{{FALSE}}}270 271 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=272 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}273 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <274 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}275 276 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <277 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}278 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=279 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}280}281 282void test_find_end4(std::vector<int> V1, std::vector<int> V2) {283 const auto i1 = return_any_iterator(V1.begin());284 const auto i2 = return_any_iterator(V1.begin());285 const auto i3 = return_any_iterator(V2.begin());286 const auto i4 = return_any_iterator(V2.begin());287 288 const auto i5 = std::find_end(std::execution::sequenced_policy(),289 i1, i2, i3, i4, odd);290 291 clang_analyzer_eval(i5 == i2); // expected-warning{{FALSE}}}292 293 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=294 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}295 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <296 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}297 298 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <299 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}300 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=301 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}302}303 304bool compare(int, int);305 306void test_lower_bound1(std::vector<int> V, int n) {307 const auto i1 = return_any_iterator(V.begin());308 const auto i2 = return_any_iterator(V.begin());309 310 const auto i3 = std::lower_bound(i1, i2, n);311 312 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}}313 314 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=315 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}316 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <317 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}318 319 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <320 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}321 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=322 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}323}324 325void test_lower_bound2(std::vector<int> V, int n) {326 const auto i1 = return_any_iterator(V.begin());327 const auto i2 = return_any_iterator(V.begin());328 329 const auto i3 = std::lower_bound(i1, i2, n, compare);330 331 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}}332 333 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=334 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}335 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <336 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}337 338 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <339 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}340 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=341 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}342}343 344void test_upper_bound1(std::vector<int> V, int n) {345 const auto i1 = return_any_iterator(V.begin());346 const auto i2 = return_any_iterator(V.begin());347 348 const auto i3 = std::upper_bound(i1, i2, n);349 350 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}}351 352 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=353 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}354 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <355 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}356 357 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <358 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}359 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=360 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}361}362 363void test_upper_bound2(std::vector<int> V, int n) {364 const auto i1 = return_any_iterator(V.begin());365 const auto i2 = return_any_iterator(V.begin());366 367 const auto i3 = std::upper_bound(i1, i2, n, compare);368 369 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}}370 371 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=372 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}373 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <374 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}375 376 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <377 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}378 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=379 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}380}381 382void test_search1(std::vector<int> V1, std::vector<int> V2) {383 const auto i1 = return_any_iterator(V1.begin());384 const auto i2 = return_any_iterator(V1.begin());385 const auto i3 = return_any_iterator(V2.begin());386 const auto i4 = return_any_iterator(V2.begin());387 388 const auto i5 = std::search(i1, i2, i3, i4);389 390 clang_analyzer_eval(i5 == i2); // expected-warning{{FALSE}}}391 392 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=393 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}394 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <395 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}396 397 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <398 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}399 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=400 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}401}402 403void test_search2(std::vector<int> V1, std::vector<int> V2) {404 const auto i1 = return_any_iterator(V1.begin());405 const auto i2 = return_any_iterator(V1.begin());406 const auto i3 = return_any_iterator(V2.begin());407 const auto i4 = return_any_iterator(V2.begin());408 409 const auto i5 = std::search(std::execution::sequenced_policy(),410 i1, i2, i3, i4);411 412 clang_analyzer_eval(i5 == i2); // expected-warning{{FALSE}}}413 414 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=415 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}416 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <417 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}418 419 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <420 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}421 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=422 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}423}424 425void test_search3(std::vector<int> V1, std::vector<int> V2) {426 const auto i1 = return_any_iterator(V1.begin());427 const auto i2 = return_any_iterator(V1.begin());428 const auto i3 = return_any_iterator(V2.begin());429 const auto i4 = return_any_iterator(V2.begin());430 431 const auto i5 = std::search(i1, i2, i3, i4, odd);432 433 clang_analyzer_eval(i5 == i2); // expected-warning{{FALSE}}}434 435 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=436 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}437 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <438 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}439 440 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <441 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}442 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=443 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}444}445 446void test_search4(std::vector<int> V1, std::vector<int> V2) {447 const auto i1 = return_any_iterator(V1.begin());448 const auto i2 = return_any_iterator(V1.begin());449 const auto i3 = return_any_iterator(V2.begin());450 const auto i4 = return_any_iterator(V2.begin());451 452 const auto i5 = std::search(std::execution::sequenced_policy(),453 i1, i2, i3, i4, odd);454 455 clang_analyzer_eval(i5 == i2); // expected-warning{{FALSE}}}456 457 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=458 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}459 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <460 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}461 462 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <463 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}464 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=465 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}466}467 468void test_search5(std::vector<int> V1, std::vector<int> V2) {469 const auto i1 = return_any_iterator(V1.begin());470 const auto i2 = return_any_iterator(V1.begin());471 const auto i3 = return_any_iterator(V2.begin());472 const auto i4 = return_any_iterator(V2.begin());473 474 const auto i5 = std::search(i1, i2, std::default_searcher(i3, i4));475 476 clang_analyzer_eval(i5 == i2); // expected-warning{{FALSE}}}477 478 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=479 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}480 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <481 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}482 483 clang_analyzer_eval(clang_analyzer_iterator_position(i5) <484 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}485 clang_analyzer_eval(clang_analyzer_iterator_position(i5) >=486 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}487}488 489void test_search_n1(std::vector<int> V, int n) {490 const auto i1 = return_any_iterator(V.begin());491 const auto i2 = return_any_iterator(V.begin());492 493 const auto i3 = std::search_n(i1, i2, 2, n);494 495 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}}496 497 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=498 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}499 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <500 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}501 502 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <503 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}504 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=505 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}506}507 508void test_search_n2(std::vector<int> V, int n) {509 const auto i1 = return_any_iterator(V.begin());510 const auto i2 = return_any_iterator(V.begin());511 512 const auto i3 = std::search_n(std::execution::sequenced_policy(),513 i1, i2, 2, n);514 515 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}}516 517 518 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=519 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}520 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <521 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}522 523 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <524 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}525 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=526 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}527}528 529void test_search_n3(std::vector<int> V, int n) {530 const auto i1 = return_any_iterator(V.begin());531 const auto i2 = return_any_iterator(V.begin());532 533 const auto i3 = std::search_n(i1, i2, 2, n, compare);534 535 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}}536 537 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=538 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}539 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <540 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}541 542 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <543 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}544 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=545 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}546}547 548void test_search_n4(std::vector<int> V, int n) {549 const auto i1 = return_any_iterator(V.begin());550 const auto i2 = return_any_iterator(V.begin());551 552 const auto i3 = std::search_n(std::execution::sequenced_policy(),553 i1, i2, 2, n, compare);554 555 clang_analyzer_eval(i3 == i2); // expected-warning{{FALSE}}}556 557 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=558 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{TRUE}}559 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <560 clang_analyzer_iterator_position(i1)); // expected-warning@-1{{FALSE}}561 562 clang_analyzer_eval(clang_analyzer_iterator_position(i3) <563 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{TRUE}}564 clang_analyzer_eval(clang_analyzer_iterator_position(i3) >=565 clang_analyzer_iterator_position(i2)); // expected-warning@-1{{FALSE}}566}567