diff --git a/cli/signalhandler.cpp b/cli/signalhandler.cpp index c87822454ae..6bbbfd5d441 100644 --- a/cli/signalhandler.cpp +++ b/cli/signalhandler.cpp @@ -124,7 +124,7 @@ static void CppcheckSignalHandler(int signo, siginfo_t * info, void * context) killid = getpid(); #endif - const auto it = utils::as_const(listofsignals).find(signo); + const auto it = listofsignals.find(signo); const char * const signame = (it==listofsignals.end()) ? "unknown" : it->second.c_str(); bool unexpectedSignal=true; // unexpected indicates program failure bool terminate=true; // exit process/thread diff --git a/lib/checkleakautovar.cpp b/lib/checkleakautovar.cpp index 00c8492498a..bb80ead84a5 100644 --- a/lib/checkleakautovar.cpp +++ b/lib/checkleakautovar.cpp @@ -1163,7 +1163,7 @@ void CheckLeakAutoVar::leakIfAllocated(const Token *vartok, const std::map &alloctype = varInfo.alloctype; const auto& possibleUsage = varInfo.possibleUsage; - const auto var = utils::as_const(alloctype).find(vartok->varId()); + const auto var = alloctype.find(vartok->varId()); if (var != alloctype.cend() && var->second.status == VarInfo::ALLOC) { const auto use = possibleUsage.find(vartok->varId()); if (use == possibleUsage.end()) { diff --git a/lib/checkuninitvar.cpp b/lib/checkuninitvar.cpp index 7dc89eb398c..906649bcb98 100644 --- a/lib/checkuninitvar.cpp +++ b/lib/checkuninitvar.cpp @@ -304,7 +304,7 @@ static void conditionAlwaysTrueOrFalse(const Token *tok, const std::mapisName() || tok->str() == ".") { while (tok && tok->str() == ".") tok = tok->astOperand2(); - const auto it = utils::as_const(variableValue).find(tok ? tok->varId() : ~0U); + const auto it = variableValue.find(tok ? tok->varId() : ~0U); if (it != variableValue.end()) { *alwaysTrue = (it->second != 0LL); *alwaysFalse = (it->second == 0LL); @@ -330,7 +330,7 @@ static void conditionAlwaysTrueOrFalse(const Token *tok, const std::mapstr() == ".") vartok = vartok->astOperand2(); - const auto it = utils::as_const(variableValue).find(vartok ? vartok->varId() : ~0U); + const auto it = variableValue.find(vartok ? vartok->varId() : ~0U); if (it == variableValue.end()) return; diff --git a/lib/ctu.cpp b/lib/ctu.cpp index 3f50dd1a485..40e13476f03 100644 --- a/lib/ctu.cpp +++ b/lib/ctu.cpp @@ -512,7 +512,7 @@ static bool findPath(const std::string &callId, if (index >= maxCtuDepth) return false; // TODO: add bailout message? - const auto it = utils::as_const(callsMap).find(callId); + const auto it = callsMap.find(callId); if (it == callsMap.end()) return false; diff --git a/lib/library.cpp b/lib/library.cpp index 1628cc3cdcd..bd4a62d0a42 100644 --- a/lib/library.cpp +++ b/lib/library.cpp @@ -46,7 +46,7 @@ struct Library::LibraryData { struct Platform { const PlatformType *platform_type(const std::string &name) const { - const auto it = utils::as_const(mPlatformTypes).find(name); + const auto it = mPlatformTypes.find(name); return (it != mPlatformTypes.end()) ? &(it->second) : nullptr; } std::map mPlatformTypes; @@ -1323,10 +1323,10 @@ const Library::ArgumentChecks * Library::getarg(const Token *ftok, int argnr) co const Function* func = nullptr; if (isNotLibraryFunction(ftok, &func)) return nullptr; - const auto it2 = utils::as_const(func->argumentChecks).find(argnr); + const auto it2 = func->argumentChecks.find(argnr); if (it2 != func->argumentChecks.cend()) return &it2->second; - const auto it3 = utils::as_const(func->argumentChecks).find(-1); + const auto it3 = func->argumentChecks.find(-1); if (it3 != func->argumentChecks.cend()) return &it3->second; return nullptr; diff --git a/lib/library.h b/lib/library.h index dea9c1e66c7..10b9463cbaa 100644 --- a/lib/library.h +++ b/lib/library.h @@ -242,21 +242,21 @@ class CPPCHECKLIB Library { bool startPatternHasStd{}; Action getAction(const std::string& function) const { - const auto i = utils::as_const(functions).find(function); + const auto i = functions.find(function); if (i != functions.end()) return i->second.action; return Action::NO_ACTION; } Yield getYield(const std::string& function) const { - const auto i = utils::as_const(functions).find(function); + const auto i = functions.find(function); if (i != functions.end()) return i->second.yield; return Yield::NO_YIELD; } const std::string& getReturnType(const std::string& function) const { - const auto i = utils::as_const(functions).find(function); + const auto i = functions.find(function); return (i != functions.end()) ? i->second.returnType : mEmptyString; } @@ -482,7 +482,7 @@ class CPPCHECKLIB Library { std::string getFunctionName(const Token *ftok, bool &error) const; static const AllocFunc* getAllocDealloc(const std::map &data, const std::string &name) { - const auto it = utils::as_const(data).find(name); + const auto it = data.find(name); return (it == data.end()) ? nullptr : &it->second; } diff --git a/lib/settings.cpp b/lib/settings.cpp index 645488260b0..cd1f094e1c1 100644 --- a/lib/settings.cpp +++ b/lib/settings.cpp @@ -109,7 +109,7 @@ std::string Settings::loadCppcheckCfg(Settings& settings, Suppressions& suppress } const picojson::object& obj = json.get(); { - const auto it = utils::as_const(obj).find("productName"); + const auto it = obj.find("productName"); if (it != obj.cend()) { const auto& v = it->second; if (!v.is()) @@ -118,7 +118,7 @@ std::string Settings::loadCppcheckCfg(Settings& settings, Suppressions& suppress } } { - const auto it = utils::as_const(obj).find("manualUrl"); + const auto it = obj.find("manualUrl"); if (it != obj.cend()) { const auto& v = it->second; if (!v.is()) @@ -127,7 +127,7 @@ std::string Settings::loadCppcheckCfg(Settings& settings, Suppressions& suppress } } { - const auto it = utils::as_const(obj).find("about"); + const auto it = obj.find("about"); if (it != obj.cend()) { const auto& v = it->second; if (!v.is()) @@ -136,7 +136,7 @@ std::string Settings::loadCppcheckCfg(Settings& settings, Suppressions& suppress } } { - const auto it = utils::as_const(obj).find("addons"); + const auto it = obj.find("addons"); if (it != obj.cend()) { const auto& entry = it->second; if (!entry.is()) @@ -154,7 +154,7 @@ std::string Settings::loadCppcheckCfg(Settings& settings, Suppressions& suppress } } { - const auto it = utils::as_const(obj).find("suppressions"); + const auto it = obj.find("suppressions"); if (it != obj.cend()) { const auto& entry = it->second; if (!entry.is()) @@ -171,7 +171,7 @@ std::string Settings::loadCppcheckCfg(Settings& settings, Suppressions& suppress } } { - const auto it = utils::as_const(obj).find("safety"); + const auto it = obj.find("safety"); if (it != obj.cend()) { const auto& v = it->second; if (!v.is()) diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index 3bde7a71e19..287a73f9451 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -3860,7 +3860,7 @@ void SymbolDatabase::returnImplicitIntError(const Token *tok) const const Function* Type::getFunction(const std::string& funcName) const { if (classScope) { - const auto it = utils::as_const(classScope->functionMap).find(funcName); + const auto it = classScope->functionMap.find(funcName); if (it != classScope->functionMap.end()) return it->second; } @@ -4834,7 +4834,7 @@ std::vector Function::getOverloadedFunctions() const while (scope) { const bool isMemberFunction = scope->isClassOrStruct() && !isStatic(); - for (auto it = utils::as_const(scope->functionMap).find(tokenDef->str()); + for (auto it = scope->functionMap.find(tokenDef->str()); it != scope->functionMap.end() && it->first == tokenDef->str(); ++it) { const Function* func = it->second; @@ -4885,7 +4885,7 @@ const Function * Function::getOverriddenFunctionRecursive(const ::Type* baseType const Scope *parent = derivedFromType->classScope; // check if function defined in base class - auto range = utils::as_const(parent->functionMap).equal_range(tokenDef->str()); + auto range = parent->functionMap.equal_range(tokenDef->str()); for (auto it = range.first; it != range.second; ++it) { const Function * func = it->second; if (func->isImplicitlyVirtual()) { // Base is virtual and of same name @@ -5832,7 +5832,7 @@ void Scope::findFunctionInBase(const Token* tok, nonneg int args, std::vectorclassScope == this) // Ticket #5120, #5125: Recursive class; tok should have been found already continue; - auto range = utils::as_const(base->classScope->functionMap).equal_range(tok->str()); + auto range = base->classScope->functionMap.equal_range(tok->str()); for (auto it = range.first; it != range.second; ++it) { const Function *func = it->second; if (func->isDestructor() && !Token::simpleMatch(tok->tokAt(-1), "~")) @@ -5994,7 +5994,7 @@ const Function* Scope::findFunction(const Token *tok, bool requireConst, Referen const std::size_t args = arguments.size(); auto addMatchingFunctions = [&](const Scope *scope) { - auto range = utils::as_const(scope->functionMap).equal_range(tok->str()); + auto range = scope->functionMap.equal_range(tok->str()); for (auto it = range.first; it != range.second; ++it) { const Function *func = it->second; if (ref == Reference::LValue && func->hasRvalRefQualifier()) @@ -6762,7 +6762,7 @@ Function * SymbolDatabase::findFunctionInScope(const Token *func, const Scope *n const Function * function = nullptr; const bool destructor = func->strAt(-1) == "~"; - auto range = utils::as_const(ns->functionMap).equal_range(func->str()); + auto range = ns->functionMap.equal_range(func->str()); for (auto it = range.first; it != range.second; ++it) { if (it->second->argsMatch(ns, it->second->argDef, func->next(), path, path_length) && it->second->isDestructor() == destructor) { @@ -7681,14 +7681,14 @@ static const Function *getOperatorFunction(const Token * const tok) const Scope *classScope = getClassScope(tok->astOperand1()); if (classScope) { - auto it = utils::as_const(classScope->functionMap).find(functionName); + auto it = classScope->functionMap.find(functionName); if (it != classScope->functionMap.end()) return it->second; } classScope = getClassScope(tok->astOperand2()); if (classScope) { - auto it = utils::as_const(classScope->functionMap).find(functionName); + auto it = classScope->functionMap.find(functionName); if (it != classScope->functionMap.end()) return it->second; } diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp index 193fa5bbb4d..4c6598b3736 100644 --- a/lib/tokenize.cpp +++ b/lib/tokenize.cpp @@ -135,7 +135,7 @@ Tokenizer::~Tokenizer() nonneg int Tokenizer::sizeOfType(const std::string& type) const { - const auto it = utils::as_const(mTypeSize).find(type); + const auto it = mTypeSize.find(type); if (it == mTypeSize.end()) { const Library::PodType* podtype = mSettings.library.podtype(type); if (!podtype) @@ -154,7 +154,7 @@ nonneg int Tokenizer::sizeOfType(const Token *type) const if (type->tokType() == Token::eString) return Token::getStrLength(type) + 1U; - const auto it = utils::as_const(mTypeSize).find(type->str()); + const auto it = mTypeSize.find(type->str()); if (it == mTypeSize.end()) { const Library::PodType* podtype = mSettings.library.podtype(type->str()); if (!podtype) @@ -4629,7 +4629,7 @@ void Tokenizer::setVarIdClassFunction(const std::string &classname, if (Token::Match(tok2, "%name% ::")) continue; - const auto it = utils::as_const(varlist).find(tok2->str()); + const auto it = varlist.find(tok2->str()); if (it != varlist.end()) { tok2->varId(it->second); setVarIdStructMembers(tok2, structMembers, varId_); @@ -7799,7 +7799,7 @@ bool Tokenizer::simplifyCAlternativeTokens() if (!tok->isName()) continue; - const auto cOpIt = utils::as_const(cAlternativeTokens).find(tok->str()); + const auto cOpIt = cAlternativeTokens.find(tok->str()); if (cOpIt != cAlternativeTokens.end()) { alt.push_back(tok); @@ -7841,7 +7841,7 @@ bool Tokenizer::simplifyCAlternativeTokens() return false; for (Token *tok: alt) { - const auto cOpIt = utils::as_const(cAlternativeTokens).find(tok->str()); + const auto cOpIt = cAlternativeTokens.find(tok->str()); if (cOpIt != cAlternativeTokens.end()) tok->str(cOpIt->second); else if (tok->str() == "not") @@ -10442,7 +10442,7 @@ void Tokenizer::simplifyMicrosoftStringFunctions() if (tok->strAt(1) != "(") continue; - const auto match = utils::as_const(apis).find(tok->str()); + const auto match = apis.find(tok->str()); if (match!=apis.end()) { tok->str(ansi ? match->second.mbcs : match->second.unicode); tok->originalName(match->first); diff --git a/lib/utils.h b/lib/utils.h index abe1477a2a8..b3650b59529 100644 --- a/lib/utils.h +++ b/lib/utils.h @@ -414,6 +414,7 @@ namespace utils { template constexpr typename std::add_const::type & as_const(T& t) noexcept { + static_assert(!std::is_const::value, "object is already const"); // NOLINTNEXTLINE(bugprone-return-const-ref-from-parameter) - potential false positive return t; }