diff --git a/lib/astutils.cpp b/lib/astutils.cpp index 56b04edb4b0..ff4320be8c1 100644 --- a/lib/astutils.cpp +++ b/lib/astutils.cpp @@ -991,7 +991,7 @@ static const Token * getVariableInitExpression(const Variable * var) const Token* isInLoopCondition(const Token* tok) { const Token* top = tok->astTop(); - return top && Token::Match(top->previous(), "for|while (") ? top : nullptr; + return Token::Match(top->previous(), "for|while (") ? top : nullptr; } /// If tok2 comes after tok1 diff --git a/lib/checkcondition.cpp b/lib/checkcondition.cpp index 0c5c10a803c..09a24157470 100644 --- a/lib/checkcondition.cpp +++ b/lib/checkcondition.cpp @@ -1117,7 +1117,7 @@ static std::string conditionString(const Token * tok) static bool isIfConstexpr(const Token* tok) { const Token* const top = tok->astTop(); - return top && Token::simpleMatch(top->astOperand1(), "if") && top->astOperand1()->isConstexpr(); + return Token::simpleMatch(top->astOperand1(), "if") && top->astOperand1()->isConstexpr(); } void CheckCondition::checkIncorrectLogicOperator() diff --git a/lib/checkother.cpp b/lib/checkother.cpp index 9fa60ae233d..b89a5918c76 100644 --- a/lib/checkother.cpp +++ b/lib/checkother.cpp @@ -2307,8 +2307,6 @@ static const Token * getSingleExpressionInBlock(const Token * tok) if (!tok) return nullptr; const Token * top = tok->astTop(); - if (!top) - return nullptr; const Token * nextExpression = nextAfterAstRightmostLeaf(top); if (!Token::simpleMatch(nextExpression, "; }")) return nullptr; diff --git a/lib/checkstl.cpp b/lib/checkstl.cpp index 07fb63ac8cb..866a450670e 100644 --- a/lib/checkstl.cpp +++ b/lib/checkstl.cpp @@ -1613,22 +1613,8 @@ static const Token* skipLocalVars(const Token* const tok) if (Token::simpleMatch(tok, "{")) return skipLocalVars(tok->next()); - const Token *top = tok->astTop(); - if (!top) { - const Token *semi = Token::findsimplematch(tok, ";"); - if (!semi) - return tok; - if (!Token::Match(semi->previous(), "%var% ;")) - return tok; - const Token *varTok = semi->previous(); - const Variable *var = varTok->variable(); - if (!var) - return tok; - if (var->nameToken() != varTok) - return tok; - return skipLocalVars(semi->next()); - } if (tok->isAssignmentOp()) { + const Token *top = tok->astTop(); const Token *varTok = top->astOperand1(); const Variable *var = varTok->variable(); if (!var) diff --git a/lib/forwardanalyzer.cpp b/lib/forwardanalyzer.cpp index 17e340a5014..b779aac8e87 100644 --- a/lib/forwardanalyzer.cpp +++ b/lib/forwardanalyzer.cpp @@ -585,7 +585,7 @@ namespace { return Break(Analyzer::Terminate::Bail); } else if (tok->str() == ";" && tok->astParent()) { Token* top = tok->astTop(); - if (top && Token::Match(top->previous(), "for|while (") && Token::simpleMatch(top->link(), ") {")) { + if (Token::Match(top->previous(), "for|while (") && Token::simpleMatch(top->link(), ") {")) { Token* endCond = top->link(); Token* endBlock = endCond->linkAt(1); Token* condTok = getCondTok(top); diff --git a/lib/programmemory.cpp b/lib/programmemory.cpp index 97c1756a4c0..95fce1bb958 100644 --- a/lib/programmemory.cpp +++ b/lib/programmemory.cpp @@ -509,7 +509,7 @@ void ProgramMemoryState::assume(const Token* tok, bool b, bool isEmpty) programMemoryParseCondition(pm, tok, nullptr, *settings, b); const Token* origin = tok; const Token* top = tok->astTop(); - if (top && Token::Match(top->previous(), "for|while|if (") && !Token::simpleMatch(tok->astParent(), "?")) { + if (Token::Match(top->previous(), "for|while|if (") && !Token::simpleMatch(tok->astParent(), "?")) { origin = top->link()->next(); if (!b && origin->link()) { origin = origin->link(); @@ -1727,8 +1727,6 @@ namespace { return {unknown()}; for (const Token* tok = scope->bodyStart->next(); precedes(tok, scope->bodyEnd); tok = tok->next()) { const Token* top = tok->astTop(); - if (!top) - return {unknown()}; if (Token::simpleMatch(top, "return") && top->astOperand1()) return {execute(top->astOperand1())}; diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 06d43e11e43..5f88aa01b99 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -635,7 +635,7 @@ static bool isConditionKnown(const Token* tok, bool then) while (parent && (parent->str() == op || parent->str() == "!" || parent->isCast())) parent = parent->astParent(); const Token* top = tok->astTop(); - if (top && Token::Match(top->previous(), "if|while|for (")) + if (Token::Match(top->previous(), "if|while|for (")) return parent == top || Token::simpleMatch(parent, ";"); return parent && parent->str() != op; } @@ -2372,7 +2372,7 @@ const Token* ValueFlow::getEndOfExprScope(const Token* tok, const Scope* default end = varEnd; const Token* top = var->nameToken()->astTop(); - if (top && Token::simpleMatch(top->tokAt(-1), "if (")) { // variable declared in if (...) + if (Token::simpleMatch(top->tokAt(-1), "if (")) { // variable declared in if (...) const Token* elseTok = top->link()->linkAt(1); if (Token::simpleMatch(elseTok, "} else {") && tok->scope()->isNestedIn(elseTok->tokAt(2)->scope())) end = tok->scope()->bodyEnd; @@ -4751,8 +4751,6 @@ struct ConditionHandler { continue; const Token* top = tok->astTop(); - if (!top) - continue; if (!Token::Match(top->previous(), "if|while|for (") && !Token::Match(tok->astParent(), "&&|%oror%|?|!")) continue; @@ -4927,8 +4925,6 @@ struct ConditionHandler { const Settings& settings, const std::set& skippedFunctions) const { traverseCondition(symboldatabase, settings, skippedFunctions, [&](const Condition& cond, Token* condTok, const Scope* scope) { - Token* top = condTok->astTop(); - const MathLib::bigint path = cond.getPath(); const bool allowKnown = path == 0; @@ -5003,8 +4999,7 @@ struct ConditionHandler { } } - if (!top) - return; + Token* top = condTok->astTop(); if (top->previous()->isExpandedMacro()) { for (std::list* values : {&thenValues, &elseValues}) {