Fixed #9218 (False positive: Searching before insertion is not necessary (stlFindInsert))
This commit is contained in:
parent
a5babf25a7
commit
55262f03ec
|
@ -1558,6 +1558,9 @@ void CheckStl::checkFindInsert()
|
|||
std::tie(containerTok, keyTok) = isMapFind(condTok->astOperand1());
|
||||
if (!containerTok)
|
||||
continue;
|
||||
// In < C++17 we only warn for small simple types
|
||||
if (!(keyTok->valueType()->isIntegral() || keyTok->valueType()->pointer > 0) && mSettings->standards.cpp < Standards::CPP17)
|
||||
continue;
|
||||
|
||||
const Token *thenTok = tok->next()->link()->next();
|
||||
const Token *valueTok = findInsertValue(thenTok, containerTok, keyTok, mSettings->library);
|
||||
|
|
|
@ -4726,6 +4726,21 @@ private:
|
|||
"}\n",
|
||||
true);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
|
||||
// #9218 - not small type => do not warn if cpp standard is < c++17
|
||||
{
|
||||
const char code[] = "void f1(std::set<LargeType>& s, const LargeType& x) {\n"
|
||||
" if (s.find(x) == s.end()) {\n"
|
||||
" s.insert(x);\n"
|
||||
" }\n"
|
||||
"}\n";
|
||||
check(code, true, Standards::CPP11);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
check(code, true, Standards::CPP14);
|
||||
ASSERT_EQUALS("", errout.str());
|
||||
check(code, true, Standards::CPP17);
|
||||
ASSERT_EQUALS("[test.cpp:3]: (performance) Searching before insertion is not necessary.\n", errout.str());
|
||||
}
|
||||
}
|
||||
|
||||
void checkKnownEmptyContainer() {
|
||||
|
|
Loading…
Reference in New Issue