diff --git a/lib/checkautovariables.cpp b/lib/checkautovariables.cpp index cb369285b..b0ae5f27b 100644 --- a/lib/checkautovariables.cpp +++ b/lib/checkautovariables.cpp @@ -393,43 +393,6 @@ void CheckAutoVariables::errorUselessAssignmentPtrArg(const Token *tok) //--------------------------------------------------------------------------- -static bool astHasAutoResult(const Token *tok) -{ - if (tok->astOperand1() && !astHasAutoResult(tok->astOperand1())) - return false; - if (tok->astOperand2() && !astHasAutoResult(tok->astOperand2())) - return false; - - if (tok->isOp()) { - if (tok->tokType() == Token::eIncDecOp) - return false; - if ((tok->str() == "<<" || tok->str() == ">>") && tok->astOperand1()) { - const Token* tok2 = tok->astOperand1(); - while (tok2 && tok2->isUnaryOp("*")) - tok2 = tok2->astOperand1(); - return tok2 && tok2->variable() && !tok2->variable()->isClass() && !tok2->variable()->isStlType(); // Class or unknown type on LHS: Assume it is a stream - } - return true; - } - - if (tok->isLiteral()) - return true; - - if (tok->isName()) { - // TODO: check function calls, struct members, arrays, etc also - if (!tok->variable()) - return false; - if (tok->variable()->isStlType()) - return true; - if (tok->variable()->isClass() || tok->variable()->isPointer() || tok->variable()->isReference()) // TODO: Properly handle pointers/references to classes in symbol database - return false; - - return true; - } - - return false; -} - static bool isInScope(const Token * tok, const Scope * scope) { if (!tok) diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index e97f1895a..ecd1d6d6b 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -1567,34 +1567,6 @@ static bool isConditionKnown(const Token* tok, bool then) return (parent && parent->str() == "("); } -static void valueFlowAST(Token *tok, nonneg int varid, const ValueFlow::Value &value, const Settings *settings) -{ - if (!tok) - return; - if (tok->varId() == varid) - setTokenValue(tok, value, settings); - valueFlowAST(tok->astOperand1(), varid, value, settings); - if (tok->str() == "&&" && tok->astOperand1() && tok->astOperand1()->getValue(0)) { - ProgramMemory pm; - pm.setValue(varid,value); - if (conditionIsFalse(tok->astOperand1(), pm)) - return; - } else if (tok->str() == "||" && tok->astOperand1()) { - const std::list &values = tok->astOperand1()->values(); - const bool nonzero = std::any_of(values.cbegin(), values.cend(), - [=](const ValueFlow::Value &v) { - return v.intvalue != 0; - }); - if (!nonzero) - return; - ProgramMemory pm; - pm.setValue(varid,value); - if (conditionIsTrue(tok->astOperand1(), pm)) - return; - } - valueFlowAST(tok->astOperand2(), varid, value, settings); -} - static const std::string& invertAssign(const std::string& assign) { static std::unordered_map lookup = {