Fixed #5467 (False positive incorrectly claiming use after erase)
This commit is contained in:
parent
a9e53026bd
commit
59cd1879db
|
@ -77,6 +77,9 @@ void CheckStl::iterators()
|
||||||
if (!var || !var->isLocal() || !Token::Match(var->typeEndToken(), "iterator|const_iterator|reverse_iterator|const_reverse_iterator|auto"))
|
if (!var || !var->isLocal() || !Token::Match(var->typeEndToken(), "iterator|const_iterator|reverse_iterator|const_reverse_iterator|auto"))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (var->typeEndToken()->str() == "auto" && !Token::Match(var->typeEndToken(), "auto %var% ; %var% = %var% . begin|end ( )"))
|
||||||
|
continue;
|
||||||
|
|
||||||
if (var->type()) { // If it is defined, ensure that it is defined like an iterator
|
if (var->type()) { // If it is defined, ensure that it is defined like an iterator
|
||||||
// look for operator* and operator++
|
// look for operator* and operator++
|
||||||
const Function* end = var->type()->getFunction("operator*");
|
const Function* end = var->type()->getFunction("operator*");
|
||||||
|
|
|
@ -506,6 +506,13 @@ private:
|
||||||
" std::cout << (*iter) << std::endl;\n"
|
" std::cout << (*iter) << std::endl;\n"
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS("[test.cpp:6] -> [test.cpp:5]: (error) Iterator 'iter' used after element has been erased.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:6] -> [test.cpp:5]: (error) Iterator 'iter' used after element has been erased.\n", errout.str());
|
||||||
|
|
||||||
|
check("void f() {\n"
|
||||||
|
" auto x = *myList.begin();\n"
|
||||||
|
" myList.erase(x);\n"
|
||||||
|
" auto b = x.first;\n"
|
||||||
|
"}");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void STLSize() {
|
void STLSize() {
|
||||||
|
|
Loading…
Reference in New Issue