Fixed false positive eraseDereference with range-based for-loops (#7106)
This commit is contained in:
parent
7d6e1974eb
commit
32f0cbb6ad
|
@ -89,7 +89,7 @@ void CheckStl::iterators()
|
||||||
}
|
}
|
||||||
|
|
||||||
// the validIterator flag says if the iterator has a valid value or not
|
// the validIterator flag says if the iterator has a valid value or not
|
||||||
bool validIterator = Token::Match(var->nameToken()->next(), "[(=]");
|
bool validIterator = Token::Match(var->nameToken()->next(), "[(=:]");
|
||||||
const Scope* invalidationScope = 0;
|
const Scope* invalidationScope = 0;
|
||||||
|
|
||||||
// The container this iterator can be used with
|
// The container this iterator can be used with
|
||||||
|
|
|
@ -97,6 +97,7 @@ private:
|
||||||
TEST_CASE(stlBoundaries3);
|
TEST_CASE(stlBoundaries3);
|
||||||
TEST_CASE(stlBoundaries4); // #4364
|
TEST_CASE(stlBoundaries4); // #4364
|
||||||
TEST_CASE(stlBoundaries5); // #4352
|
TEST_CASE(stlBoundaries5); // #4352
|
||||||
|
TEST_CASE(stlBoundaries6); // #7106
|
||||||
|
|
||||||
// if (str.find("ab"))
|
// if (str.find("ab"))
|
||||||
TEST_CASE(if_find);
|
TEST_CASE(if_find);
|
||||||
|
@ -1478,6 +1479,17 @@ private:
|
||||||
ASSERT_EQUALS("[test.cpp:8]: (error) Invalid iterator 'i' used.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:8]: (error) Invalid iterator 'i' used.\n", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void stlBoundaries6() { // #7106
|
||||||
|
check("void foo(std::vector<int>& vec) {\n"
|
||||||
|
" for (Function::iterator BB : vec) {\n"
|
||||||
|
" for (int Inst : *BB)\n"
|
||||||
|
" {\n"
|
||||||
|
" }\n"
|
||||||
|
" }\n"
|
||||||
|
"}");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void if_find() {
|
void if_find() {
|
||||||
// ---------------------------
|
// ---------------------------
|
||||||
|
|
Loading…
Reference in New Issue