Fixed #9234 (FP unreadVariable - assignment via iterator)
This commit is contained in:
parent
ce53931d00
commit
510748134f
|
@ -1174,6 +1174,12 @@ void CheckUnusedVar::checkFunctionVariableUsage()
|
||||||
if (!tok->astOperand1())
|
if (!tok->astOperand1())
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
const Token *iteratorToken = tok->astOperand1();
|
||||||
|
while (Token::Match(iteratorToken, "[.*]"))
|
||||||
|
iteratorToken = iteratorToken->astOperand1();
|
||||||
|
if (iteratorToken && iteratorToken->variable() && iteratorToken->variable()->typeEndToken()->str().find("iterator") != std::string::npos)
|
||||||
|
continue;
|
||||||
|
|
||||||
const Variable *op1Var = tok->astOperand1() ? tok->astOperand1()->variable() : nullptr;
|
const Variable *op1Var = tok->astOperand1() ? tok->astOperand1()->variable() : nullptr;
|
||||||
if (op1Var && op1Var->isReference() && op1Var->nameToken() != tok->astOperand1())
|
if (op1Var && op1Var->isReference() && op1Var->nameToken() != tok->astOperand1())
|
||||||
// todo: check references
|
// todo: check references
|
||||||
|
|
|
@ -129,6 +129,7 @@ private:
|
||||||
TEST_CASE(localvaralias15); // ticket #6315
|
TEST_CASE(localvaralias15); // ticket #6315
|
||||||
TEST_CASE(localvaralias16);
|
TEST_CASE(localvaralias16);
|
||||||
TEST_CASE(localvaralias17); // ticket #8911
|
TEST_CASE(localvaralias17); // ticket #8911
|
||||||
|
TEST_CASE(localvaralias18); // ticket #9234 - iterator
|
||||||
TEST_CASE(localvarasm);
|
TEST_CASE(localvarasm);
|
||||||
TEST_CASE(localvarstatic);
|
TEST_CASE(localvarstatic);
|
||||||
TEST_CASE(localvarextern);
|
TEST_CASE(localvarextern);
|
||||||
|
@ -3217,6 +3218,22 @@ private:
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void localvaralias18() {
|
||||||
|
functionVariableUsage("void add( std::vector< std::pair< int, double > >& v)\n"
|
||||||
|
"{\n"
|
||||||
|
" std::vector< std::pair< int, double > >::iterator it;\n"
|
||||||
|
" for ( it = v.begin(); it != v.end(); ++it )\n"
|
||||||
|
" {\n"
|
||||||
|
" if ( x )\n"
|
||||||
|
" {\n"
|
||||||
|
" ( *it ).second = 0;\n"
|
||||||
|
" break;\n"
|
||||||
|
" }\n"
|
||||||
|
" }\n"
|
||||||
|
"}");
|
||||||
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
}
|
||||||
|
|
||||||
void localvarasm() {
|
void localvarasm() {
|
||||||
|
|
||||||
functionVariableUsage("void foo(int &b)\n"
|
functionVariableUsage("void foo(int &b)\n"
|
||||||
|
|
Loading…
Reference in New Issue