@@ -220,18 +220,20 @@ static bool isVariableUsed(const Token *tok, const Variable& var)
220220 return false ;
221221 if (tok->isConstOp ())
222222 return isVariableUsed (tok->astOperand1 (),var) || isVariableUsed (tok->astOperand2 (),var);
223- if (var.isArray ()) {
224- const Token *parent = tok->astParent ();
225- while (Token::Match (parent, " [?:]" ))
226- parent = parent->astParent ();
227- // no dereference, then array is not "used"
228- if (!Token::Match (parent, " *|[" ))
229- return false ;
230- const Token *parent2 = parent->astParent ();
231- // TODO: handle function calls. There is a TODO assertion in TestUninitVar::uninitvar_arrays
232- return !parent2 || parent2->isConstOp () || (parent2->str () == " =" && parent2->astOperand2 () == parent);
233- }
234- return (tok->varId () == var.declarationId ());
223+ if (tok->varId () != var.declarationId ())
224+ return false ;
225+ if (!var.isArray ())
226+ return true ;
227+
228+ const Token *parent = tok->astParent ();
229+ while (Token::Match (parent, " [?:]" ))
230+ parent = parent->astParent ();
231+ // no dereference, then array is not "used"
232+ if (!Token::Match (parent, " *|[" ))
233+ return false ;
234+ const Token *parent2 = parent->astParent ();
235+ // TODO: handle function calls. There is a TODO assertion in TestUninitVar::uninitvar_arrays
236+ return !parent2 || parent2->isConstOp () || (parent2->str () == " =" && parent2->astOperand2 () == parent);
235237}
236238
237239bool CheckUninitVar::checkScopeForVariable (const Token *tok, const Variable& var, bool * const possibleInit, bool * const noreturn, Alloc* const alloc, const std::string &membervar)
0 commit comments