Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions gui/checkstatistics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,10 +109,10 @@ unsigned CheckStatistics::getCount(const QString &tool, ShowTypes::ShowType type
QStringList CheckStatistics::getTools() const
{
QSet<QString> ret;
for (const QString& tool: mStyle.keys()) ret.insert(tool);
for (const QString& tool: mWarning.keys()) ret.insert(tool);
for (const QString& tool: mPerformance.keys()) ret.insert(tool);
for (const QString& tool: mPortability.keys()) ret.insert(tool);
for (const QString& tool: mError.keys()) ret.insert(tool);
std::copy(mStyle.keys().begin(), mStyle.keys().end(), std::inserter(ret, ret.end()));
std::copy(mWarning.keys().begin(), mWarning.keys().end(), std::inserter(ret, ret.end()));
std::copy(mPerformance.keys().begin(), mPerformance.keys().end(), std::inserter(ret, ret.end()));
std::copy(mPortability.keys().begin(), mPortability.keys().end(), std::inserter(ret, ret.end()));
std::copy(mError.keys().begin(), mError.keys().end(), std::inserter(ret, ret.end()));
return ret.values();
}
1 change: 1 addition & 0 deletions lib/checkother.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4584,6 +4584,7 @@ void CheckOtherImpl::checkUnionZeroInit()
std::unordered_map<const Scope *, Union> unionsByScopeId;
const std::vector<Union> unions = parseUnions(*symbolDatabase, mSettings);
for (const Union &u : unions) {
// cppcheck-suppress useStlAlgorithm - std::transform is cumbersome
unionsByScopeId.emplace(u.scope, u);
}

Expand Down
9 changes: 4 additions & 5 deletions lib/checkstl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3116,19 +3116,18 @@ void CheckStlImpl::useStlAlgorithm()
bool useLoopVarInMemCall;
const Token *memberAccessTok = singleMemberCallInScope(bodyTok, loopVar->varId(), useLoopVarInMemCall, mSettings);
if (memberAccessTok && loopType == LoopType::RANGE) {
const Token *memberCallTok = memberAccessTok->astOperand2();
const int contVarId = memberAccessTok->astOperand1()->varId();
if (contVarId == loopVar->varId())
continue;
if (memberCallTok->str() == "push_back" ||
memberCallTok->str() == "push_front" ||
memberCallTok->str() == "emplace_back") {
using Action = Library::Container::Action;
const auto action = astContainerAction(memberAccessTok->astOperand1(), mSettings.library);
if (contains({Action::PUSH, Action::INSERT}, action)) {
std::string algo;
if (useLoopVarInMemCall)
algo = "std::copy";
else
algo = "std::transform";
useStlAlgorithmError(memberCallTok, algo);
useStlAlgorithmError(memberAccessTok->astOperand2(), algo);
}
continue;
}
Expand Down
4 changes: 2 additions & 2 deletions lib/symboldatabase.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1246,6 +1246,7 @@ void SymbolDatabase::createSymbolDatabaseSetTypePointers()
{
std::unordered_set<std::string> typenames;
for (const Type &t : typeList) {
// cppcheck-suppress useStlAlgorithm - std::transform is cumbersome
typenames.insert(t.name());
}

Expand Down Expand Up @@ -4599,8 +4600,7 @@ void SymbolDatabase::printXml(std::ostream &out) const
}

// Variables..
for (const Variable *var : mVariableList)
variables.insert(var);
std::copy(mVariableList.begin(), mVariableList.end(), std::inserter(variables, variables.end()));
outs += " <variables>\n";
for (const Variable *var : variables) {
if (!var)
Expand Down
1 change: 1 addition & 0 deletions lib/templatesimplifier.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3916,6 +3916,7 @@ void TemplateSimplifier::simplifyTemplates(const std::time_t maxtime)
std::unordered_map<std::string, int> nameOrdinal;
int ordinal = 0;
for (const auto& decl : mTemplateDeclarations) {
// cppcheck-suppress useStlAlgorithm - std::transform is cumbersome
nameOrdinal.emplace(decl.fullName(), ordinal++);
}

Expand Down
1 change: 1 addition & 0 deletions test/cfg/boost.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@ void test_BOOST_FOREACH_5()
{
std::set<int> data;
BOOST_FOREACH(const int& i, get_data())
// cppcheck-suppress useStlAlgorithm
data.insert(i);
}

Expand Down
8 changes: 8 additions & 0 deletions test/teststl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5661,6 +5661,14 @@ class TestStl : public TestFixture {
"}\n",
dinit(CheckOptions, $.inconclusive = true));
ASSERT_EQUALS("", errout_str());

check("void f(const std::vector<std::string>& v) {\n" // #14812
" std::set<std::string> s;\n"
" for (const std::string& a : v) {\n"
" s.insert(a);\n"
" }\n"
"}\n");
ASSERT_EQUALS("[test.cpp:4:11]: (style) Consider using std::copy algorithm instead of a raw loop. [useStlAlgorithm]\n", errout_str());
}

void loopAlgoIncrement() {
Expand Down
1 change: 1 addition & 0 deletions tools/dmake/dmake.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -297,6 +297,7 @@ static std::vector<std::string> prioritizelib(const std::vector<std::string>& li
std::map<std::string, std::size_t> priorities;
std::size_t prio = libfiles.size();
for (const auto &l : libfiles) {
// cppcheck-suppress useStlAlgorithm - std::transform is cumbersome
priorities.emplace(l, prio--);
}
priorities["lib/valueflow.cpp"] = 1000;
Expand Down
Loading