diff --git a/lib/checkbool.cpp b/lib/checkbool.cpp index cf902c49a..c996fdc90 100644 --- a/lib/checkbool.cpp +++ b/lib/checkbool.cpp @@ -378,9 +378,11 @@ static bool isNonBoolLHSExpr(const Token *tok) nonBoolExpr = true; else if (tok->varId() && isNonBoolStdType(tok->variable())) nonBoolExpr = true; - else if (tok->isArithmeticalOp()) + else if (tok->isArithmeticalOp()) { + if (indentlevel == 0) + return true; nonBoolExpr = true; - else if (tok->isComparisonOp() || (tok->str() == "!" && tok->previous()->str()=="(")) + } else if (tok->isComparisonOp() || (tok->str() == "!" && tok->previous()->str()=="(")) return false; else if (indentlevel == 0 && Token::Match(tok,"[;{}=?:&|^,]")) break; @@ -425,7 +427,7 @@ void CheckBool::checkComparisonOfBoolExpressionWithInt() op = opTok->str()[0]=='>'?'<':'>'; } - else if (Token::Match(tok, "! %var% %comp% %any%")) { + else if (Token::Match(tok, "! %var% %comp% %any%") && !isNonBoolLHSExpr(tok)) { numTok = tok->tokAt(3); opTok = tok->tokAt(2); if (Token::Match(opTok, "<|>")) diff --git a/test/testbool.cpp b/test/testbool.cpp index 4ee175ba1..4314c8f78 100644 --- a/test/testbool.cpp +++ b/test/testbool.cpp @@ -307,8 +307,11 @@ private: "}"); ASSERT_EQUALS("", errout.str()); - check("int f() { return !a+b1){} }"); + ASSERT_EQUALS("",errout.str()); } void comparisonOfBoolExpressionWithInt3() {