stl dangerous usage of erase: Added test cases about using return and goto
This commit is contained in:
parent
ba3752feb6
commit
f4a3119c18
|
@ -188,7 +188,7 @@ void CheckStl::eraseCheckLoop(const Token *it)
|
|||
if (indentlevel < 0)
|
||||
break;
|
||||
}
|
||||
else if (Token::simpleMatch(tok, "break ;") || Token::simpleMatch(tok, (it->str() + " =").c_str()))
|
||||
else if (Token::Match(tok, "break|return|goto") || Token::simpleMatch(tok, (it->str() + " =").c_str()))
|
||||
{
|
||||
tok2 = 0;
|
||||
break;
|
||||
|
|
|
@ -42,6 +42,8 @@ private:
|
|||
TEST_CASE(STLSizeNoErr);
|
||||
TEST_CASE(erase);
|
||||
TEST_CASE(eraseBreak);
|
||||
TEST_CASE(eraseReturn);
|
||||
TEST_CASE(eraseGoto);
|
||||
TEST_CASE(eraseAssign);
|
||||
}
|
||||
|
||||
|
@ -171,6 +173,33 @@ private:
|
|||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
void eraseReturn()
|
||||
{
|
||||
checkErase("void f()\n"
|
||||
"{\n"
|
||||
" for (it = foo.begin(); it != foo.end(); ++it)\n"
|
||||
" {\n"
|
||||
" foo.erase(it);\n"
|
||||
" return;\n"
|
||||
" }\n"
|
||||
"}\n");
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
void eraseGoto()
|
||||
{
|
||||
checkErase("void f()\n"
|
||||
"{\n"
|
||||
" for (it = foo.begin(); it != foo.end(); ++it)\n"
|
||||
" {\n"
|
||||
" foo.erase(it);\n"
|
||||
" goto abc;\n"
|
||||
" }\n"
|
||||
"bar:\n"
|
||||
"}\n");
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
}
|
||||
|
||||
void eraseAssign()
|
||||
{
|
||||
checkErase("void f()\n"
|
||||
|
|
Loading…
Reference in New Issue