Made missing comparison in loop check more generic (#3048)

This commit is contained in:
abhijit-sawant 2021-01-18 02:11:37 -05:00 committed by GitHub
parent 65395aeaa1
commit b97387db66
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 10 deletions

View File

@ -1732,8 +1732,6 @@ void CheckStl::missingComparison()
} }
const Token *incrementToken = nullptr; const Token *incrementToken = nullptr;
bool bComparedInAdvance = false;
// Parse loop.. // Parse loop..
for (const Token *tok3 = scope.bodyStart; tok3 != scope.bodyEnd; tok3 = tok3->next()) { for (const Token *tok3 = scope.bodyStart; tok3 != scope.bodyEnd; tok3 = tok3->next()) {
if (tok3->varId() == iteratorId) { if (tok3->varId() == iteratorId) {
@ -1742,16 +1740,13 @@ void CheckStl::missingComparison()
tok3 = tok3->linkAt(6); tok3 = tok3->linkAt(6);
if (!tok3) if (!tok3)
break; break;
} else if (Token::simpleMatch(tok3->astParent(), "++")) { } else if (Token::simpleMatch(tok3->astParent(), "++"))
if (!bComparedInAdvance)
incrementToken = tok3; incrementToken = tok3;
else else if (Token::simpleMatch(tok3->astParent(), "+")) {
bComparedInAdvance = false; if (Token::Match(tok3->astSibling(), "%num%")) {
} else if (Token::simpleMatch(tok3->astParent(), "+")) {
if (Token::simpleMatch(tok3->astSibling(), "1")) {
const Token* tokenGrandParent = tok3->astParent()->astParent(); const Token* tokenGrandParent = tok3->astParent()->astParent();
if (Token::Match(tokenGrandParent, "==|!=")) if (Token::Match(tokenGrandParent, "==|!="))
bComparedInAdvance = true; break;
} }
} else if (Token::Match(tok3->astParent(), "==|!=")) } else if (Token::Match(tok3->astParent(), "==|!="))
incrementToken = nullptr; incrementToken = nullptr;

View File

@ -3004,8 +3004,11 @@ private:
check("void f(const std::vector<std::string> &v) {\n" check("void f(const std::vector<std::string> &v) {\n"
" for(std::vector<std::string>::const_iterator it = v.begin(); it != v.end(); ++it) {\n" " for(std::vector<std::string>::const_iterator it = v.begin(); it != v.end(); ++it) {\n"
" if(it+1 != v.end())\n" " if(it+2 != v.end())\n"
" {\n"
" ++it;\n" " ++it;\n"
" ++it;\n"
" }\n"
" }\n" " }\n"
"}"); "}");
ASSERT_EQUALS("", errout.str()); ASSERT_EQUALS("", errout.str());