Skip to content

Commit 46a0172

Browse files
committed
FwdAnalysis: fix FP in loop
1 parent 152df1b commit 46a0172

2 files changed

Lines changed: 12 additions & 12 deletions

File tree

lib/astutils.cpp

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1104,20 +1104,12 @@ struct FwdAnalysis::Result FwdAnalysis::checkRecursive(const Token *expr, const
11041104
conditionEnd = conditionStart->link();
11051105
}
11061106
if (conditionStart && conditionEnd) {
1107-
bool write = false;
1107+
bool used = false;
11081108
for (const Token *condTok = conditionStart; condTok != conditionEnd; condTok = condTok->next()) {
1109-
if (Token::Match(condTok, "=|++|--")) {
1110-
visitAstNodes(condTok->astOperand1(),
1111-
[&](const Token *writeTok) {
1112-
if (exprVarIds.find(writeTok->varId()) != exprVarIds.end())
1113-
write = true;
1114-
return write ? ChildrenToVisit::done : ChildrenToVisit::op1_and_op2;
1115-
});
1116-
if (write)
1117-
break;
1118-
}
1109+
if (exprVarIds.find(condTok->varId()) != exprVarIds.end())
1110+
used = true;
11191111
}
1120-
if (write)
1112+
if (used)
11211113
return Result(Result::Type::BAILOUT);
11221114
}
11231115

test/testunusedvar.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2153,6 +2153,14 @@ class TestUnusedVar : public TestFixture {
21532153
" while (x < 10) { x = x + 1; }\n"
21542154
"}\n");
21552155
ASSERT_EQUALS("", errout.str());
2156+
2157+
functionVariableUsage("void fun()\n"
2158+
"{\n"
2159+
" int status = 0;\n"
2160+
" for (ind = 0; ((ind < nrArgs) && (status < 10)); ind++)\n"
2161+
" status = x;\n"
2162+
"}");
2163+
ASSERT_EQUALS("", errout.str());
21562164
}
21572165

21582166
void localvaralias1() {

0 commit comments

Comments
 (0)