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