brintos

brintos / llvm-project-archived public Read only

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