forked from OSchip/llvm-project
[Analyzer] Fix errors in iterator modeling
There is major a bug found in iterator modeling: upon adding a value to or subtracting a value from an iterator the position of the original iterator is also changed beside the result. This patch fixes this bug. To catch such bugs in the future we also changed the tests to look for regular expressions including an end-of-line symbol (`$`) so we can prevent false matches where only the tested prefix matches. Another minor bug is that when printing the state, all the iterator positions are printed in a single line. This patch also fixes this. Differential Revision: https://reviews.llvm.org/D82385
This commit is contained in:
parent
4da65c2920
commit
ea563daae5
|
@ -458,7 +458,7 @@ void IteratorModeling::processComparison(CheckerContext &C,
|
|||
StateTrue = StateTrue->assume(*ConditionVal, true);
|
||||
C.addTransition(StateTrue);
|
||||
}
|
||||
|
||||
|
||||
if (auto StateFalse = relateSymbols(State, Sym1, Sym2, Op != OO_EqualEqual)) {
|
||||
StateFalse = StateFalse->assume(*ConditionVal, false);
|
||||
C.addTransition(StateFalse);
|
||||
|
@ -540,14 +540,16 @@ void IteratorModeling::handleRandomIncrOrDecr(CheckerContext &C,
|
|||
|
||||
auto &TgtVal = (Op == OO_PlusEqual || Op == OO_MinusEqual) ? LHS : RetVal;
|
||||
|
||||
auto NewState =
|
||||
advancePosition(State, LHS, Op, *value);
|
||||
if (NewState) {
|
||||
const auto *NewPos = getIteratorPosition(NewState, LHS);
|
||||
// `AdvancedState` is a state where the position of `LHS` is advanced. We
|
||||
// only need this state to retrieve the new position, but we do not want
|
||||
// to change the position of `LHS` (in every case).
|
||||
auto AdvancedState = advancePosition(State, LHS, Op, *value);
|
||||
if (AdvancedState) {
|
||||
const auto *NewPos = getIteratorPosition(AdvancedState, LHS);
|
||||
assert(NewPos &&
|
||||
"Iterator should have position after successful advancement");
|
||||
|
||||
State = setIteratorPosition(NewState, TgtVal, *NewPos);
|
||||
State = setIteratorPosition(State, TgtVal, *NewPos);
|
||||
C.addTransition(State);
|
||||
} else {
|
||||
assignToContainer(C, CE, TgtVal, Pos->getContainer());
|
||||
|
@ -611,10 +613,15 @@ void IteratorModeling::printState(raw_ostream &Out, ProgramStateRef State,
|
|||
const char *NL, const char *Sep) const {
|
||||
auto SymbolMap = State->get<IteratorSymbolMap>();
|
||||
auto RegionMap = State->get<IteratorRegionMap>();
|
||||
// Use a counter to add newlines before every line except the first one.
|
||||
unsigned Count = 0;
|
||||
|
||||
if (!SymbolMap.isEmpty() || !RegionMap.isEmpty()) {
|
||||
Out << Sep << "Iterator Positions :" << NL;
|
||||
for (const auto &Sym : SymbolMap) {
|
||||
if (Count++)
|
||||
Out << NL;
|
||||
|
||||
Sym.first->dumpToStream(Out);
|
||||
Out << " : ";
|
||||
const auto Pos = Sym.second;
|
||||
|
@ -625,6 +632,9 @@ void IteratorModeling::printState(raw_ostream &Out, ProgramStateRef State,
|
|||
}
|
||||
|
||||
for (const auto &Reg : RegionMap) {
|
||||
if (Count++)
|
||||
Out << NL;
|
||||
|
||||
Reg.first->dumpToStream(Out);
|
||||
Out << " : ";
|
||||
const auto Pos = Reg.second;
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
// RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=core,cplusplus,debug.DebugIteratorModeling,debug.ExprInspection -analyzer-config aggressive-binary-operation-simplification=true -analyzer-config c++-container-inlining=false %s -verify
|
||||
// RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=core,cplusplus,debug.DebugIteratorModeling,debug.ExprInspection -analyzer-config aggressive-binary-operation-simplification=true -analyzer-config c++-container-inlining=false %s -verify -analyzer-config display-checker-name=false
|
||||
|
||||
// RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=core,cplusplus,debug.DebugIteratorModeling,debug.ExprInspection -analyzer-config aggressive-binary-operation-simplification=true -analyzer-config c++-container-inlining=true -DINLINE=1 %s -verify
|
||||
// RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=core,cplusplus,debug.DebugIteratorModeling,debug.ExprInspection -analyzer-config aggressive-binary-operation-simplification=true -analyzer-config c++-container-inlining=true -DINLINE=1 %s -verify -analyzer-config display-checker-name=false
|
||||
|
||||
// RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=core,cplusplus,debug.DebugIteratorModeling,debug.ExprInspection -analyzer-config aggressive-binary-operation-simplification=true -analyzer-config c++-container-inlining=true -DINLINE=1 -DSTD_ADVANCE_INLINE_LEVEL=0 %s -verify
|
||||
// RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=core,cplusplus,debug.DebugIteratorModeling,debug.ExprInspection -analyzer-config aggressive-binary-operation-simplification=true -analyzer-config c++-container-inlining=true -DINLINE=1 -DSTD_ADVANCE_INLINE_LEVEL=0 %s -verify -analyzer-config display-checker-name=false
|
||||
|
||||
// RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=core,cplusplus,debug.DebugIteratorModeling,debug.ExprInspection -analyzer-config aggressive-binary-operation-simplification=true -analyzer-config c++-container-inlining=true -DINLINE=1 -DSTD_ADVANCE_INLINE_LEVEL=1 %s -verify
|
||||
// RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=core,cplusplus,debug.DebugIteratorModeling,debug.ExprInspection -analyzer-config aggressive-binary-operation-simplification=true -analyzer-config c++-container-inlining=true -DINLINE=1 -DSTD_ADVANCE_INLINE_LEVEL=1 %s -verify -analyzer-config display-checker-name=false
|
||||
|
||||
// RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=core,cplusplus,debug.DebugIteratorModeling,debug.ExprInspection -analyzer-config aggressive-binary-operation-simplification=true -analyzer-config c++-container-inlining=true -DINLINE=1 -DSTD_ADVANCE_INLINE_LEVEL=2 %s -verify
|
||||
// RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=core,cplusplus,debug.DebugIteratorModeling,debug.ExprInspection -analyzer-config aggressive-binary-operation-simplification=true -analyzer-config c++-container-inlining=true -DINLINE=1 -DSTD_ADVANCE_INLINE_LEVEL=2 %s -verify -analyzer-config display-checker-name=false
|
||||
|
||||
// RUN: %clang_analyze_cc1 -std=c++11 -analyzer-checker=core,cplusplus,alpha.cplusplus.IteratorModeling,debug.ExprInspection -analyzer-config aggressive-binary-operation-simplification=true %s 2>&1 | FileCheck %s
|
||||
|
||||
|
@ -33,7 +33,7 @@ void begin(const std::vector<int> &v) {
|
|||
|
||||
clang_analyzer_eval(clang_analyzer_iterator_container(i) == &v); // expected-warning{{TRUE}}
|
||||
clang_analyzer_denote(clang_analyzer_container_begin(v), "$v.begin()");
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i)); //expected-warning{{$v.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i)); // expected-warning-re {{$v.begin(){{$}}}}
|
||||
|
||||
if (i != v.begin()) {
|
||||
clang_analyzer_warnIfReached();
|
||||
|
@ -45,7 +45,7 @@ void end(const std::vector<int> &v) {
|
|||
|
||||
clang_analyzer_eval(clang_analyzer_iterator_container(i) == &v); // expected-warning{{TRUE}}
|
||||
clang_analyzer_denote(clang_analyzer_container_end(v), "$v.end()");
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i)); //expected-warning{{$v.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i)); // expected-warning-re {{$v.end(){{$}}}}
|
||||
|
||||
if (i != v.end()) {
|
||||
clang_analyzer_warnIfReached();
|
||||
|
@ -59,8 +59,8 @@ void prefix_increment(const std::vector<int> &v) {
|
|||
|
||||
auto j = ++i;
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i)); //expected-warning{{$v.begin() + 1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(j)); //expected-warning{{$v.begin() + 1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i)); // expected-warning-re {{$v.begin() + 1{{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(j)); // expected-warning-re {{$v.begin() + 1{{$}}}}
|
||||
}
|
||||
|
||||
void prefix_decrement(const std::vector<int> &v) {
|
||||
|
@ -70,8 +70,8 @@ void prefix_decrement(const std::vector<int> &v) {
|
|||
|
||||
auto j = --i;
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i)); //expected-warning{{$v.end() - 1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(j)); //expected-warning{{$v.end() - 1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i)); // expected-warning-re {{$v.end() - 1{{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(j)); // expected-warning-re {{$v.end() - 1{{$}}}}
|
||||
}
|
||||
|
||||
void postfix_increment(const std::vector<int> &v) {
|
||||
|
@ -81,8 +81,8 @@ void postfix_increment(const std::vector<int> &v) {
|
|||
|
||||
auto j = i++;
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i)); //expected-warning{{$v.begin() + 1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(j)); //expected-warning{{$v.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i)); // expected-warning-re {{$v.begin() + 1{{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(j)); // expected-warning-re {{$v.begin(){{$}}}}
|
||||
}
|
||||
|
||||
void postfix_decrement(const std::vector<int> &v) {
|
||||
|
@ -92,8 +92,8 @@ void postfix_decrement(const std::vector<int> &v) {
|
|||
|
||||
auto j = i--;
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i)); //expected-warning{{$v.end() - 1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(j)); //expected-warning{{$v.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i)); // expected-warning-re {{$v.end() - 1{{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(j)); // expected-warning-re {{$v.end(){{$}}}}
|
||||
}
|
||||
|
||||
void plus_equal(const std::vector<int> &v) {
|
||||
|
@ -103,7 +103,7 @@ void plus_equal(const std::vector<int> &v) {
|
|||
|
||||
i += 2;
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i)); //expected-warning{{$v.begin() + 2}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i)); // expected-warning-re {{$v.begin() + 2{{$}}}}
|
||||
}
|
||||
|
||||
void plus_equal_negative(const std::vector<int> &v) {
|
||||
|
@ -113,7 +113,7 @@ void plus_equal_negative(const std::vector<int> &v) {
|
|||
|
||||
i += -2;
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i)); //expected-warning{{$v.end() - 2}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i)); // expected-warning-re {{$v.end() - 2{{$}}}}
|
||||
}
|
||||
|
||||
void minus_equal(const std::vector<int> &v) {
|
||||
|
@ -123,7 +123,7 @@ void minus_equal(const std::vector<int> &v) {
|
|||
|
||||
i -= 2;
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i)); //expected-warning{{$v.end() - 2}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i)); // expected-warning-re {{$v.end() - 2{{$}}}}
|
||||
}
|
||||
|
||||
void minus_equal_negative(const std::vector<int> &v) {
|
||||
|
@ -133,7 +133,7 @@ void minus_equal_negative(const std::vector<int> &v) {
|
|||
|
||||
i -= -2;
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i)); //expected-warning{{$v.begin() + 2}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i)); // expected-warning-re {{$v.begin() + 2{{$}}}}
|
||||
}
|
||||
|
||||
void copy(const std::vector<int> &v) {
|
||||
|
@ -144,7 +144,8 @@ void copy(const std::vector<int> &v) {
|
|||
auto i2 = i1;
|
||||
|
||||
clang_analyzer_eval(clang_analyzer_iterator_container(i2) == &v); // expected-warning{{TRUE}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); //expected-warning{{$v.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$v.end(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$v.end(){{$}}}}
|
||||
}
|
||||
|
||||
void plus(const std::vector<int> &v) {
|
||||
|
@ -155,7 +156,8 @@ void plus(const std::vector<int> &v) {
|
|||
auto i2 = i1 + 2;
|
||||
|
||||
clang_analyzer_eval(clang_analyzer_iterator_container(i2) == &v); // expected-warning{{TRUE}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); //expected-warning{{$v.begin() + 2}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re{{$v.begin(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re{{$v.begin() + 2{{$}}}}
|
||||
}
|
||||
|
||||
void plus_negative(const std::vector<int> &v) {
|
||||
|
@ -166,7 +168,8 @@ void plus_negative(const std::vector<int> &v) {
|
|||
auto i2 = i1 + (-2);
|
||||
|
||||
clang_analyzer_eval(clang_analyzer_iterator_container(i2) == &v); // expected-warning{{TRUE}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); //expected-warning{{$v.end() - 2}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$v.end(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$v.end() - 2{{$}}}}
|
||||
}
|
||||
|
||||
void minus(const std::vector<int> &v) {
|
||||
|
@ -177,7 +180,8 @@ void minus(const std::vector<int> &v) {
|
|||
auto i2 = i1 - 2;
|
||||
|
||||
clang_analyzer_eval(clang_analyzer_iterator_container(i2) == &v); // expected-warning{{TRUE}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); //expected-warning{{$v.end() - 2}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$v.end(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$v.end() - 2{{$}}}}
|
||||
}
|
||||
|
||||
void minus_negative(const std::vector<int> &v) {
|
||||
|
@ -188,7 +192,8 @@ void minus_negative(const std::vector<int> &v) {
|
|||
auto i2 = i1 - (-2);
|
||||
|
||||
clang_analyzer_eval(clang_analyzer_iterator_container(i2) == &v); // expected-warning{{TRUE}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); //expected-warning{{$v.begin() + 2}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$v.begin(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$v.begin() + 2{{$}}}}
|
||||
}
|
||||
|
||||
void copy_and_increment1(const std::vector<int> &v) {
|
||||
|
@ -199,8 +204,8 @@ void copy_and_increment1(const std::vector<int> &v) {
|
|||
auto i2 = i1;
|
||||
++i1;
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); //expected-warning{{$v.begin() + 1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); //expected-warning{{$v.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$v.begin() + 1{{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$v.begin(){{$}}}}
|
||||
}
|
||||
|
||||
void copy_and_increment2(const std::vector<int> &v) {
|
||||
|
@ -211,8 +216,8 @@ void copy_and_increment2(const std::vector<int> &v) {
|
|||
auto i2 = i1;
|
||||
++i2;
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); //expected-warning{{$v.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); //expected-warning{{$v.begin() + 1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$v.begin(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$v.begin() + 1{{$}}}}
|
||||
}
|
||||
|
||||
void copy_and_decrement1(const std::vector<int> &v) {
|
||||
|
@ -223,8 +228,8 @@ void copy_and_decrement1(const std::vector<int> &v) {
|
|||
auto i2 = i1;
|
||||
--i1;
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); //expected-warning{{$v.end() - 1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); //expected-warning{{$v.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$v.end() - 1{{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$v.end(){{$}}}}
|
||||
}
|
||||
|
||||
void copy_and_decrement2(const std::vector<int> &v) {
|
||||
|
@ -235,8 +240,8 @@ void copy_and_decrement2(const std::vector<int> &v) {
|
|||
auto i2 = i1;
|
||||
--i2;
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); //expected-warning{{$v.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); //expected-warning{{$v.end() - 1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$v.end(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$v.end() - 1{{$}}}}
|
||||
}
|
||||
|
||||
/// std::advance(), std::prev(), std::next()
|
||||
|
@ -248,7 +253,7 @@ void std_advance_minus(const std::vector<int> &v) {
|
|||
|
||||
std::advance(i, -1);
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i)); //expected-warning{{$v.end() - 1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i)); // expected-warning-re {{$v.end() - 1{{$}}}}
|
||||
}
|
||||
|
||||
void std_advance_plus(const std::vector<int> &v) {
|
||||
|
@ -258,7 +263,7 @@ void std_advance_plus(const std::vector<int> &v) {
|
|||
|
||||
std::advance(i, 1);
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i)); //expected-warning{{$v.begin() + 1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i)); // expected-warning-re {{$v.begin() + 1{{$}}}}
|
||||
}
|
||||
|
||||
void std_prev(const std::vector<int> &v) {
|
||||
|
@ -268,7 +273,7 @@ void std_prev(const std::vector<int> &v) {
|
|||
|
||||
auto j = std::prev(i);
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(j)); //expected-warning{{$v.end() - 1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(j)); // expected-warning-re {{$v.end() - 1{{$}}}}
|
||||
}
|
||||
|
||||
void std_prev2(const std::vector<int> &v) {
|
||||
|
@ -278,7 +283,7 @@ void std_prev2(const std::vector<int> &v) {
|
|||
|
||||
auto j = std::prev(i, 2);
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(j)); //expected-warning{{$v.end() - 2}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(j)); // expected-warning-re {{$v.end() - 2{{$}}}}
|
||||
}
|
||||
|
||||
void std_next(const std::vector<int> &v) {
|
||||
|
@ -288,7 +293,7 @@ void std_next(const std::vector<int> &v) {
|
|||
|
||||
auto j = std::next(i);
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(j)); //expected-warning{{$v.begin() + 1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(j)); // expected-warning-re {{$v.begin() + 1{{$}}}}
|
||||
}
|
||||
|
||||
void std_next2(const std::vector<int> &v) {
|
||||
|
@ -298,7 +303,7 @@ void std_next2(const std::vector<int> &v) {
|
|||
|
||||
auto j = std::next(i, 2);
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(j)); //expected-warning{{$v.begin() + 2}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(j)); // expected-warning-re {{$v.begin() + 2{{$}}}}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -356,7 +361,7 @@ void list_move_assignment(std::list<int> &L1, std::list<int> &L2) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_container(i1) == &L1); // expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_container(i2) == &L1); // expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$L2.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$L2.begin(){{$}}}}
|
||||
}
|
||||
|
||||
void vector_move_assignment(std::vector<int> &V1, std::vector<int> &V2) {
|
||||
|
@ -374,7 +379,7 @@ void vector_move_assignment(std::vector<int> &V1, std::vector<int> &V2) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_container(i1) == &V1); // expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_container(i2) == &V1); // expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$V2.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$V2.begin(){{$}}}}
|
||||
}
|
||||
|
||||
void deque_move_assignment(std::deque<int> &D1, std::deque<int> &D2) {
|
||||
|
@ -392,7 +397,7 @@ void deque_move_assignment(std::deque<int> &D1, std::deque<int> &D2) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_container(i1) == &D1); // expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_container(i2) == &D1); // expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$D2.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$D2.begin(){{$}}}}
|
||||
}
|
||||
|
||||
void forward_list_move_assignment(std::forward_list<int> &FL1,
|
||||
|
@ -409,7 +414,7 @@ void forward_list_move_assignment(std::forward_list<int> &FL1,
|
|||
|
||||
clang_analyzer_eval(clang_analyzer_iterator_container(i1) == &FL1); // expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$FL2.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$FL2.begin(){{$}}}}
|
||||
}
|
||||
|
||||
|
||||
|
@ -506,9 +511,9 @@ void list_push_back(std::list<int> &L, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$L.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$L.end() - 1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning{{$L.end()}} FIXME: Should be $L.end() + 1
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$L.begin(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$L.end() - 1{{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$L.end(){{$}}}} FIXME: Should be $L.end() + 1
|
||||
}
|
||||
|
||||
/// std::vector-like containers: The past-the-end iterator is invalidated.
|
||||
|
@ -525,8 +530,8 @@ void vector_push_back(std::vector<int> &V, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{FALSE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$V.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$V.end() - 1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$V.begin(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$V.end() - 1{{$}}}}
|
||||
}
|
||||
|
||||
/// std::deque-like containers: All iterators, including the past-the-end
|
||||
|
@ -566,9 +571,9 @@ void list_emplace_back(std::list<int> &L, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$L.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$L.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning{{$L.end()}} FIXME: Should be $L.end() + 1
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$L.begin(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$L.end() - 1{{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$L.end(){{$}}}} FIXME: Should be $L.end() + 1
|
||||
}
|
||||
|
||||
/// std::vector-like containers: The past-the-end iterator is invalidated.
|
||||
|
@ -585,8 +590,8 @@ void vector_emplace_back(std::vector<int> &V, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{FALSE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$V.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$V.end() - 1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$V.begin(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$V.end() - 1{{$}}}}
|
||||
}
|
||||
|
||||
/// std::deque-like containers: All iterators, including the past-the-end
|
||||
|
@ -626,8 +631,8 @@ void list_pop_back(std::list<int> &L, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{FALSE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$L.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning{{$L.end()}} FIXME: Should be $L.end() - 1
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$L.begin(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$L.end(){{$}}}} FIXME: Should be $L.end() - 1
|
||||
}
|
||||
|
||||
/// std::vector-like containers: Iterators to the last element, as well as the
|
||||
|
@ -645,7 +650,7 @@ void vector_pop_back(std::vector<int> &V, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{FALSE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{FALSE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$V.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$V.begin(){{$}}}}
|
||||
}
|
||||
|
||||
/// std::deque-like containers: Iterators to the last element are invalidated.
|
||||
|
@ -664,7 +669,7 @@ void deque_pop_back(std::deque<int> &D, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{FALSE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{FALSE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$D.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$D.begin(){{$}}}}
|
||||
}
|
||||
|
||||
/// push_front()
|
||||
|
@ -687,8 +692,8 @@ void list_push_front(std::list<int> &L, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i0)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$L.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$L.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$L.begin(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$L.end(){{$}}}}
|
||||
}
|
||||
|
||||
/// std::deque-like containers: All iterators, including the past-the-end
|
||||
|
@ -720,8 +725,8 @@ void forward_list_push_front(std::forward_list<int> &FL, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i0)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$FL.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$FL.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$FL.begin(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$FL.end(){{$}}}}
|
||||
}
|
||||
|
||||
/// emplace_front()
|
||||
|
@ -744,8 +749,8 @@ void list_emplace_front(std::list<int> &L, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i0)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$L.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$L.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$L.begin(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$L.end(){{$}}}}
|
||||
}
|
||||
|
||||
/// std::deque-like containers: All iterators, including the past-the-end
|
||||
|
@ -777,8 +782,8 @@ void forward_list_emplace_front(std::forward_list<int> &FL, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i0)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$FL.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$FL.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$FL.begin(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$FL.end(){{$}}}}
|
||||
}
|
||||
|
||||
/// pop_front()
|
||||
|
@ -802,8 +807,8 @@ void list_pop_front(std::list<int> &L, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$L.begin() + 1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning{{$L.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$L.begin() + 1{{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$L.end(){{$}}}}
|
||||
}
|
||||
|
||||
/// std::deque-like containers: Iterators to the first element are invalidated.
|
||||
|
@ -821,8 +826,8 @@ void deque_pop_front(std::deque<int> &D, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$D.begin() + 1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning{{$D.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$D.begin() + 1{{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$D.end(){{$}}}}
|
||||
}
|
||||
|
||||
/// std::forward_list-like containers: Iterators to the first element are
|
||||
|
@ -840,8 +845,8 @@ void forward_list_pop_front(std::list<int> &FL, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$FL.begin() + 1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning{{$FL.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$FL.begin() + 1{{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$FL.end(){{$}}}}
|
||||
}
|
||||
|
||||
/// insert()
|
||||
|
@ -867,9 +872,9 @@ void list_insert_begin(std::list<int> &L, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i0)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$L.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$L.begin(){{$}}}}
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i2)); FIXME: expect warning $L.begin() - 1
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$L.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$L.end(){{$}}}}
|
||||
}
|
||||
|
||||
void list_insert_behind_begin(std::list<int> &L, int n) {
|
||||
|
@ -884,10 +889,10 @@ void list_insert_behind_begin(std::list<int> &L, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$L.begin()}} FIXME: Should be $L.begin() - 1
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$L.begin() + 1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$L.begin(){{$}}}} FIXME: Should be $L.begin() - 1
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$L.begin() + 1{{$}}}}
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i3)); FIXME: expect warning $L.begin()
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning{{$L.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$L.end(){{$}}}}
|
||||
}
|
||||
|
||||
template <typename Iter> Iter return_any_iterator(const Iter &It);
|
||||
|
@ -905,10 +910,10 @@ void list_insert_unknown(std::list<int> &L, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$L.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$i1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$L.begin(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$i1{{$}}}}
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i3)); FIXME: expect warning $i - 1
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning{{$L.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$L.end(){{$}}}}
|
||||
}
|
||||
|
||||
void list_insert_ahead_of_end(std::list<int> &L, int n) {
|
||||
|
@ -923,9 +928,9 @@ void list_insert_ahead_of_end(std::list<int> &L, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$L.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$L.end() - 1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning{{$L.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$L.begin(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$L.end() - 1{{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$L.end(){{$}}}}
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i3)); FIXME: expect warning $L.end() - 2
|
||||
}
|
||||
|
||||
|
@ -941,9 +946,9 @@ void list_insert_end(std::list<int> &L, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$L.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$L.end() - 1}} FIXME: should be $L.end() - 2
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning{{$L.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$L.begin(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$L.end() - 1{{$}}}} FIXME: should be $L.end() - 2
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$L.end(){{$}}}}
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i3)); FIXME: expect warning $L.end() - 1
|
||||
}
|
||||
|
||||
|
@ -977,7 +982,7 @@ void vector_insert_behind_begin(std::vector<int> &V, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{FALSE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{FALSE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$V.begin()}} FIXME: Should be $V.begin() - 1
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$V.begin(){{$}}}} FIXME: Should be $V.begin() - 1
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i3)); // FIXME: expect -warning $V.begin()
|
||||
}
|
||||
|
||||
|
@ -994,7 +999,7 @@ void vector_insert_unknown(std::vector<int> &V, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{FALSE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{FALSE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$V.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$V.begin(){{$}}}}
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i3)); FIXME: expecte warning $i1 - 1
|
||||
}
|
||||
|
||||
|
@ -1010,7 +1015,7 @@ void vector_insert_ahead_of_end(std::vector<int> &V, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{FALSE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{FALSE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$V.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$V.begin(){{$}}}}
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i3)); FIXME: expect warning $V.end() - 2
|
||||
}
|
||||
|
||||
|
@ -1026,8 +1031,8 @@ void vector_insert_end(std::vector<int> &V, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{FALSE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$V.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$V.end() - 1}} FIXME: Should be $V.end() - 2
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$V.begin(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$V.end() - 1{{$}}}} FIXME: Should be $V.end() - 2
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i3)); FIXME: expect warning $V.end() - 1
|
||||
}
|
||||
|
||||
|
@ -1130,9 +1135,9 @@ void forward_list_insert_after_begin(std::forward_list<int> &FL, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i0)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$FL.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$FL.begin(){{$}}}}
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i2)); FIXME: expect warning $FL.begin() + 1
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$FL.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$FL.end(){{$}}}}
|
||||
}
|
||||
|
||||
void forward_list_insert_after_behind_begin(std::forward_list<int> &FL, int n) {
|
||||
|
@ -1147,10 +1152,10 @@ void forward_list_insert_after_behind_begin(std::forward_list<int> &FL, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$FL.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$FL.begin() + 1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$FL.begin(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$FL.begin() + 1{{$}}}}
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i3)); FIXME: expect warning $FL.begin() + 2
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning{{$FL.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$FL.end(){{$}}}}
|
||||
}
|
||||
|
||||
void forward_list_insert_after_unknown(std::forward_list<int> &FL, int n) {
|
||||
|
@ -1166,10 +1171,10 @@ void forward_list_insert_after_unknown(std::forward_list<int> &FL, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$FL.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$i1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$FL.begin(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$i1{{$}}}}
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i3)); FIXME: expect warning $i1 + 1
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning{{$FL.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$FL.end(){{$}}}}
|
||||
}
|
||||
|
||||
/// emplace()
|
||||
|
@ -1195,9 +1200,9 @@ void list_emplace_begin(std::list<int> &L, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i0)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$L.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$L.begin(){{$}}}}
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i2)); FIXME: expect warning $L.begin() - 1
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$L.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$L.end(){{$}}}}
|
||||
}
|
||||
|
||||
void list_emplace_behind_begin(std::list<int> &L, int n) {
|
||||
|
@ -1212,10 +1217,10 @@ void list_emplace_behind_begin(std::list<int> &L, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$L.begin()}} FIXME: Should be $L.begin() - 1
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$L.begin() + 1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$L.begin(){{$}}}} FIXME: Should be $L.begin() - 1
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$L.begin() + 1{{$}}}}
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i3)); FIXME: expect warning $L.begin()
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning{{$L.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$L.end(){{$}}}}
|
||||
}
|
||||
|
||||
template <typename Iter> Iter return_any_iterator(const Iter &It);
|
||||
|
@ -1233,10 +1238,10 @@ void list_emplace_unknown(std::list<int> &L, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$L.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$i1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$L.begin(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$i1{{$}}}}
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i3)); FIXME: expect warning $i - 1
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning{{$L.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$L.end(){{$}}}}
|
||||
}
|
||||
|
||||
void list_emplace_ahead_of_end(std::list<int> &L, int n) {
|
||||
|
@ -1251,9 +1256,9 @@ void list_emplace_ahead_of_end(std::list<int> &L, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$L.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$L.end() - 1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning{{$L.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$L.begin(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$L.end() - 1{{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$L.end(){{$}}}}
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i3)); FIXME: expect warning $L.end() - 2
|
||||
}
|
||||
|
||||
|
@ -1269,9 +1274,9 @@ void list_emplace_end(std::list<int> &L, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$L.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$L.end() - 1}} FIXME: should be $L.end() - 2
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning{{$L.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$L.begin(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$L.end() - 1{{$}}}} FIXME: should be $L.end() - 2
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$L.end(){{$}}}}
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i3)); FIXME: expect warning $L.end() - 1
|
||||
}
|
||||
|
||||
|
@ -1304,7 +1309,7 @@ void vector_emplace_behind_begin(std::vector<int> &V, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{FALSE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{FALSE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$V.begin()}} FIXME: Should be $V.begin() - 1
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$V.begin(){{$}}}} FIXME: Should be $V.begin() - 1
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i3)); // FIXME: expect -warning $V.begin()
|
||||
}
|
||||
|
||||
|
@ -1321,7 +1326,7 @@ void vector_emplace_unknown(std::vector<int> &V, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{FALSE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{FALSE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$V.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$V.begin(){{$}}}}
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i3)); FIXME: expecte warning $i1 - 1
|
||||
}
|
||||
|
||||
|
@ -1337,7 +1342,7 @@ void vector_emplace_ahead_of_end(std::vector<int> &V, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{FALSE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{FALSE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$V.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$V.begin(){{$}}}}
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i3)); FIXME: expect warning $V.end() - 2
|
||||
}
|
||||
|
||||
|
@ -1353,8 +1358,8 @@ void vector_emplace_end(std::vector<int> &V, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{FALSE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$V.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$V.end() - 1}} FIXME: Should be $V.end() - 2
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$V.begin(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$V.end() - 1{{$}}}} FIXME: Should be $V.end() - 2
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i3)); FIXME: expect warning $V.end() - 1
|
||||
}
|
||||
|
||||
|
@ -1455,9 +1460,9 @@ void forward_list_emplace_after_begin(std::forward_list<int> &FL, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i0)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$FL.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$FL.begin(){{$}}}}
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i2)); FIXME: expect warning $FL.begin() + 1
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$FL.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$FL.end(){{$}}}}
|
||||
}
|
||||
|
||||
void forward_list_emplace_after_behind_begin(std::forward_list<int> &FL,
|
||||
|
@ -1473,10 +1478,10 @@ void forward_list_emplace_after_behind_begin(std::forward_list<int> &FL,
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$FL.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$FL.begin() + 1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$FL.begin(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$FL.begin() + 1{{$}}}}
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i3)); FIXME: expect warning $FL.begin() + 2
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning{{$FL.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$FL.end(){{$}}}}
|
||||
}
|
||||
|
||||
void forward_list_emplace_after_unknown(std::forward_list<int> &FL, int n) {
|
||||
|
@ -1492,10 +1497,10 @@ void forward_list_emplace_after_unknown(std::forward_list<int> &FL, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$FL.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$i1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$FL.begin(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$i1{{$}}}}
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i3)); FIXME: expect warning $i1 + 1
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning{{$FL.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$FL.end(){{$}}}}
|
||||
}
|
||||
|
||||
/// erase()
|
||||
|
@ -1523,9 +1528,9 @@ void list_erase_begin(std::list<int> &L) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$L.begin() + 1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$L.begin() + 1{{$}}}}
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i3)); FIXME: expect warning $L.begin() + 1
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning{{$L.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$L.end(){{$}}}}
|
||||
}
|
||||
|
||||
void list_erase_behind_begin(std::list<int> &L, int n) {
|
||||
|
@ -1540,9 +1545,9 @@ void list_erase_behind_begin(std::list<int> &L, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{FALSE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$L.begin()}} FIXME: Should be $L.begin() + 1
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$L.begin(){{$}}}} FIXME: Should be $L.begin() + 1
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i3)); FIXME: expect warning $L.begin() + 2
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning{{$L.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$L.end(){{$}}}}
|
||||
}
|
||||
|
||||
void list_erase_unknown(std::list<int> &L) {
|
||||
|
@ -1558,9 +1563,9 @@ void list_erase_unknown(std::list<int> &L) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{FALSE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$L.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$L.begin(){{$}}}}
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i3)); FIXME: expect warning $i1 + 1
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning{{$L.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$L.end(){{$}}}}
|
||||
}
|
||||
|
||||
void list_erase_ahead_of_end(std::list<int> &L) {
|
||||
|
@ -1575,8 +1580,8 @@ void list_erase_ahead_of_end(std::list<int> &L) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{FALSE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$L.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning{{$L.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$L.begin(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$L.end(){{$}}}}
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i3)); FIXME: expect warning $L.end()
|
||||
}
|
||||
|
||||
|
@ -1610,7 +1615,7 @@ void vector_erase_behind_begin(std::vector<int> &V, int n) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{FALSE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{FALSE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$V.begin()}} FIXME: Should be $V.begin() + 1
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$V.begin(){{$}}}} FIXME: Should be $V.begin() + 1
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i3)); FIXME: expect warning $V.begin() + 2
|
||||
}
|
||||
|
||||
|
@ -1627,7 +1632,7 @@ void vector_erase_unknown(std::vector<int> &V) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{FALSE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{FALSE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$V.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$V.begin(){{$}}}}
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i3)); FIXME: expect warning $i1 + 1
|
||||
}
|
||||
|
||||
|
@ -1643,7 +1648,7 @@ void vector_erase_ahead_of_end(std::vector<int> &V) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i1)); //expected-warning{{FALSE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{FALSE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$V.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$V.begin(){{$}}}}
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i3)); FIXME: expect warning $V.end()
|
||||
}
|
||||
|
||||
|
@ -1743,10 +1748,10 @@ void forward_list_erase_after_begin(std::forward_list<int> &FL) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i2)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i3)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$FL.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning{{$FL.begin() + 2}} FIXME: Should be $FL.begin() + 1
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$FL.begin(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i2)); // expected-warning-re {{$FL.begin() + 2{{$}}}} FIXME: Should be $FL.begin() + 1
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i4)); FIXME: expect warning $FL.begin() + 1
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i3)); // expected-warning{{$FL.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i3)); // expected-warning-re {{$FL.end(){{$}}}}
|
||||
}
|
||||
|
||||
void forward_list_erase_after_unknown(std::forward_list<int> &FL) {
|
||||
|
@ -1768,11 +1773,11 @@ void forward_list_erase_after_unknown(std::forward_list<int> &FL) {
|
|||
clang_analyzer_eval(clang_analyzer_iterator_validity(i3)); //expected-warning{{TRUE}}
|
||||
clang_analyzer_eval(clang_analyzer_iterator_validity(i4)); //expected-warning{{TRUE}}
|
||||
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning{{$FL.begin()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning{{$i1}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i3)); // expected-warning{{$i1 + 2}} FIXME: Should be $i1 + 1
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i0)); // expected-warning-re {{$FL.begin(){{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i1)); // expected-warning-re {{$i1{{$}}}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i3)); // expected-warning-re {{$i1 + 2{{$}}}} FIXME: Should be $i1 + 1
|
||||
// clang_analyzer_express(clang_analyzer_iterator_position(i5)); FIXME: expect warning $i1 + 1
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i4)); // expected-warning{{$FL.end()}}
|
||||
clang_analyzer_express(clang_analyzer_iterator_position(i4)); // expected-warning-re {{$FL.end(){{$}}}}
|
||||
}
|
||||
|
||||
struct simple_iterator_base {
|
||||
|
@ -1806,7 +1811,7 @@ struct simple_container {
|
|||
|
||||
void good_derived(simple_container c) {
|
||||
auto i0 = c.end();
|
||||
|
||||
|
||||
if (i0 != c.end()) {
|
||||
clang_analyzer_warnIfReached();
|
||||
}
|
||||
|
@ -1863,20 +1868,26 @@ void clang_analyzer_printState();
|
|||
|
||||
void print_state(std::vector<int> &V) {
|
||||
const auto i0 = V.cbegin();
|
||||
const auto i1 = V.cbegin() + 1;
|
||||
clang_analyzer_printState();
|
||||
|
||||
// CHECK: "checker_messages": [
|
||||
// CHECK: { "checker": "alpha.cplusplus.IteratorModeling", "messages": [
|
||||
// CHECK-NEXT: "Iterator Positions :",
|
||||
// CHECK-NEXT: "i0 : Valid ; Container == SymRegion{reg_$[[#]]<std::vector<int> & V>} ; Offset == conj_$[[#]]{long, LC[[#]], S[[#]], #[[#]]}"
|
||||
// CHECK-NEXT: ]}
|
||||
// CHECK: "checker_messages": [
|
||||
// CHECK: { "checker": "alpha.cplusplus.IteratorModeling", "messages": [
|
||||
// CHECK-NEXT: "Iterator Positions :",
|
||||
// CHECK-NEXT: "i0 : Valid ; Container == SymRegion{reg_$[[#]]<std::vector<int> & V>} ; Offset == conj_$[[#]]{long, LC[[#]], S[[#]], #[[#]]}"
|
||||
// CHECK-NEXT: "i1 : Valid ; Container == SymRegion{reg_$[[#]]<std::vector<int> & V>} ; Offset == (conj_$[[#]]{long, LC[[#]], S[[#]], #[[#]]}) + 1"
|
||||
// CHECK-NEXT: ]}
|
||||
|
||||
const auto i1 = V.cend();
|
||||
*i0;
|
||||
*i1;
|
||||
const auto i2 = V.cend();
|
||||
clang_analyzer_printState();
|
||||
|
||||
// CHECK: "checker_messages": [
|
||||
// CHECK: { "checker": "alpha.cplusplus.IteratorModeling", "messages": [
|
||||
// CHECK-NEXT: "Iterator Positions :",
|
||||
// CHECK-NEXT: "i1 : Valid ; Container == SymRegion{reg_$[[#]]<std::vector<int> & V>} ; Offset == conj_$[[#]]{long, LC[[#]], S[[#]], #[[#]]}"
|
||||
// CHECK-NEXT: ]}
|
||||
|
||||
// CHECK: "checker_messages": [
|
||||
// CHECK: { "checker": "alpha.cplusplus.IteratorModeling", "messages": [
|
||||
// CHECK-NEXT: "Iterator Positions :",
|
||||
// CHECK-NEXT: "i2 : Valid ; Container == SymRegion{reg_$[[#]]<std::vector<int> & V>} ; Offset == conj_$[[#]]{long, LC[[#]], S[[#]], #[[#]]}"
|
||||
// CHECK-NEXT: ]}
|
||||
|
||||
*i2;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue