diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 32e31dc6c..faae1cb3f 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -3366,6 +3366,8 @@ static void valueFlowLifetime(TokenList *tokenlist, SymbolDatabase*, ErrorLogger } // container lifetimes else if (tok->variable() && Token::Match(tok, "%var% . begin|cbegin|rbegin|crbegin|end|cend|rend|crend|data|c_str|find (")) { + if (Token::simpleMatch(tok->tokAt(2), "find") && !astIsIterator(tok->tokAt(3))) + continue; ErrorPath errorPath; const Library::Container * container = settings->library.detectContainer(tok->variable()->typeStartToken()); if (!container) diff --git a/test/testautovariables.cpp b/test/testautovariables.cpp index 1061636d1..de1d0de15 100644 --- a/test/testautovariables.cpp +++ b/test/testautovariables.cpp @@ -1730,6 +1730,12 @@ private: " }\n" "};\n"); ASSERT_EQUALS("", errout.str()); + + check("size_t f(const std::string& x) {\n" + " std::string y = \"x\";\n" + " return y.find(x);\n" + "}\n"); + ASSERT_EQUALS("", errout.str()); } void danglingLifetime() {