MCPcopy Create free account
hub / github.com/cppcheck-opensource/cppcheck / isVariableUsed

Function isVariableUsed

lib/checkuninitvar.cpp:372–394  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

370}
371
372static bool isVariableUsed(const Token *tok, const Variable& var)
373{
374 if (!tok)
375 return false;
376 if (tok->str() == "&" && !tok->astOperand2())
377 return false;
378 if (tok->isConstOp())
379 return isVariableUsed(tok->astOperand1(),var) || isVariableUsed(tok->astOperand2(),var);
380 if (tok->varId() != var.declarationId())
381 return false;
382 if (!var.isArray() && !var.isPointer())
383 return true;
384
385 const Token *parent = tok->astParent();
386 while (Token::Match(parent, "[?:]"))
387 parent = parent->astParent();
388 // no dereference, then array is not "used"
389 if (!Token::Match(parent, "*|["))
390 return false;
391 const Token *parent2 = parent->astParent();
392 // TODO: handle function calls. There is a TODO assertion in TestUninitVar::uninitvar_arrays
393 return !parent2 || parent2->isConstOp() || (parent2->str() == "=" && parent2->astOperand2() == parent);
394}
395
396bool CheckUninitVarImpl::checkScopeForVariable(const Token *tok, const Variable& var, bool * const possibleInit, bool * const noreturn, Alloc* const alloc, const std::string &membervar, std::map<nonneg int, VariableValue>& variableValue)
397{

Callers 2

checkScopeForVariableMethod · 0.85
checkRhsMethod · 0.85

Calls 6

astOperand2Method · 0.80
isConstOpMethod · 0.80
astOperand1Method · 0.80
isArrayMethod · 0.80
astParentMethod · 0.80
strMethod · 0.45

Tested by

no test coverage detected