From 12af125fd3885fb0cf411b82c7a89b03306c07bb Mon Sep 17 00:00:00 2001 From: PKEuS Date: Fri, 20 Nov 2015 20:08:35 +0100 Subject: [PATCH] Fixed false positive stlIfStrFind for function call inside condition. Removed unnecessary suppressions in .travis_suppressions --- .travis_suppressions | 3 --- lib/checkstl.cpp | 7 +++++-- test/teststl.cpp | 5 +++++ 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/.travis_suppressions b/.travis_suppressions index 76f0e8268..2b8d75bad 100644 --- a/.travis_suppressions +++ b/.travis_suppressions @@ -7,9 +7,6 @@ uselessAssignmentPtrArg:build/tokenize.cpp *:test/test.cxx *:test/cfg* -*:democlient* *:externals* -*:htdocs* *:htmlreport* *:samples* -*:win_installer* diff --git a/lib/checkstl.cpp b/lib/checkstl.cpp index 4a7250eb4..f893ff8a8 100644 --- a/lib/checkstl.cpp +++ b/lib/checkstl.cpp @@ -655,11 +655,14 @@ void CheckStl::if_find() if ((i->type != Scope::eIf && i->type != Scope::eWhile) || !i->classDef) continue; - for (const Token *tok = i->classDef; tok->str() != "{"; tok = tok->next()) { + for (const Token *tok = i->classDef->next(); tok->str() != "{"; tok = tok->next()) { const Token* funcTok = nullptr; const Library::Container* container = nullptr; - if (tok->variable() && Token::Match(tok, "%var% . %name% (")) { + if (Token::Match(tok, "%name% (")) + tok = tok->linkAt(1); + + else if (tok->variable() && Token::Match(tok, "%var% . %name% (")) { container = _settings->library.detectContainer(tok->variable()->typeStartToken()); funcTok = tok->tokAt(2); } diff --git a/test/teststl.cpp b/test/teststl.cpp index 83d5e852e..f324d54d2 100644 --- a/test/teststl.cpp +++ b/test/teststl.cpp @@ -1721,6 +1721,11 @@ private: " if (a.find(\"<\") < b.find(\">\")) {}\n" "}"); ASSERT_EQUALS("", errout.str()); + + check("void f(const std::string &s) {\n" + " if (foo(s.find(\"abc\"))) { }\n" + "}"); + ASSERT_EQUALS("", errout.str()); }