Skip to content

Commit 014ec2f

Browse files
committed
Check condition stored in variable
1 parent c8a70f1 commit 014ec2f

1 file changed

Lines changed: 13 additions & 6 deletions

File tree

lib/checkleakautovar.cpp

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,18 @@ static const Token* getReturnValueFromOutparamAlloc(const Token* alloc, const Se
295295
return nullptr;
296296
}
297297

298+
static std::vector<const Token*> getComparisonTokens(const Token* tok)
299+
{
300+
std::vector<const Token*> result{ tok };
301+
if (tok->hasKnownValue(ValueFlow::Value::ValueType::SYMBOLIC))
302+
result.push_back(tok->getKnownValue(ValueFlow::Value::ValueType::SYMBOLIC)->tokvalue);
303+
for (const Token* op : { tok->astOperand1(), tok->astOperand2() }) {
304+
if (op && op->hasKnownValue(ValueFlow::Value::ValueType::SYMBOLIC))
305+
result.push_back(op->getKnownValue(ValueFlow::Value::ValueType::SYMBOLIC)->tokvalue);
306+
}
307+
return result;
308+
}
309+
298310
bool CheckLeakAutoVar::checkScope(const Token * const startToken,
299311
VarInfo &varInfo,
300312
std::set<int> notzero,
@@ -578,13 +590,8 @@ bool CheckLeakAutoVar::checkScope(const Token * const startToken,
578590
astOperand2AfterCommas = astOperand2AfterCommas->astOperand2();
579591

580592
// Recursively scan variable comparisons in condition
581-
const Token* compToks[] = {
582-
astOperand2AfterCommas,
583-
astOperand2AfterCommas->hasKnownValue(ValueFlow::Value::ValueType::SYMBOLIC) ? astOperand2AfterCommas->getKnownValue(ValueFlow::Value::ValueType::SYMBOLIC)->tokvalue : nullptr
584-
};
593+
const std::vector<const Token*> compToks = getComparisonTokens(astOperand2AfterCommas);
585594
for (const Token* compTok : compToks) {
586-
if (!compTok)
587-
continue;
588595
visitAstNodes(compTok, [&](const Token* tok3) {
589596
if (!tok3)
590597
return ChildrenToVisit::none;

0 commit comments

Comments
 (0)