https://github.com/kazutakahirata created https://github.com/llvm/llvm-project/pull/140477
We can simplify the code with *Map::try_emplace where we need default-constructed values while avoding calling constructors when keys are already present. >From c3a085a286f1e876a721f6299622a681905013ed Mon Sep 17 00:00:00 2001 From: Kazu Hirata <k...@google.com> Date: Sun, 18 May 2025 11:40:32 -0700 Subject: [PATCH] [clang] Use *Map::try_emplace (NFC) We can simplify the code with *Map::try_emplace where we need default-constructed values while avoding calling constructors when keys are already present. --- clang/lib/AST/DeclBase.cpp | 3 +-- clang/lib/Basic/Diagnostic.cpp | 3 +-- clang/lib/Basic/SourceManager.cpp | 2 +- clang/lib/CodeGen/CGOpenMPRuntime.cpp | 2 +- clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp | 4 ++-- clang/lib/Lex/PPLexerChange.cpp | 2 +- clang/lib/Lex/Preprocessor.cpp | 2 +- clang/lib/Sema/SemaDecl.cpp | 2 +- 8 files changed, 9 insertions(+), 11 deletions(-) diff --git a/clang/lib/AST/DeclBase.cpp b/clang/lib/AST/DeclBase.cpp index e30057e32d312..a1bb62bcb68fa 100644 --- a/clang/lib/AST/DeclBase.cpp +++ b/clang/lib/AST/DeclBase.cpp @@ -1924,8 +1924,7 @@ DeclContext::lookupImpl(DeclarationName Name, Map = CreateStoredDeclsMap(getParentASTContext()); // If we have a lookup result with no external decls, we are done. - std::pair<StoredDeclsMap::iterator, bool> R = - Map->insert(std::make_pair(Name, StoredDeclsList())); + std::pair<StoredDeclsMap::iterator, bool> R = Map->try_emplace(Name); if (!R.second && !R.first->second.hasExternalDecls()) return R.first->second.getLookupResult(); diff --git a/clang/lib/Basic/Diagnostic.cpp b/clang/lib/Basic/Diagnostic.cpp index c45607f218594..b48eed8650672 100644 --- a/clang/lib/Basic/Diagnostic.cpp +++ b/clang/lib/Basic/Diagnostic.cpp @@ -150,8 +150,7 @@ void DiagnosticsEngine::Reset(bool soft /*=false*/) { DiagnosticMapping & DiagnosticsEngine::DiagState::getOrAddMapping(diag::kind Diag) { - std::pair<iterator, bool> Result = - DiagMap.insert(std::make_pair(Diag, DiagnosticMapping())); + std::pair<iterator, bool> Result = DiagMap.try_emplace(Diag); // Initialize the entry if we added it. if (Result.second) { diff --git a/clang/lib/Basic/SourceManager.cpp b/clang/lib/Basic/SourceManager.cpp index 6d6e54b1bec69..4028bbf060364 100644 --- a/clang/lib/Basic/SourceManager.cpp +++ b/clang/lib/Basic/SourceManager.cpp @@ -1726,7 +1726,7 @@ void SourceManager::computeMacroArgsCache(MacroArgsMap &MacroArgsCache, assert(FID.isValid()); // Initially no macro argument chunk is present. - MacroArgsCache.insert(std::make_pair(0, SourceLocation())); + MacroArgsCache.try_emplace(0); int ID = FID.ID; while (true) { diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp index df6edee93f3bb..e458d437d085a 100644 --- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp +++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp @@ -11350,7 +11350,7 @@ CGOpenMPRuntime::LastprivateConditionalRAII::LastprivateConditionalRAII( LastprivateConditionalData &Data = CGM.getOpenMPRuntime().LastprivateConditionalStack.emplace_back(); for (const Decl *VD : NeedToAddForLPCsAsDisabled) - Data.DeclToUniqueName.insert(std::make_pair(VD, SmallString<16>())); + Data.DeclToUniqueName.try_emplace(VD); Data.Fn = CGF.CurFn; Data.Disabled = true; } diff --git a/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp b/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp index 6f819640a9521..f746b483b2b91 100644 --- a/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp +++ b/clang/lib/CodeGen/CGOpenMPRuntimeGPU.cpp @@ -1020,7 +1020,7 @@ llvm::Function *CGOpenMPRuntimeGPU::emitTeamsOutlinedFunction( for (const auto &Pair : MappedDeclsFields) { assert(Pair.getFirst()->isCanonicalDecl() && "Expected canonical declaration"); - Data.insert(std::make_pair(Pair.getFirst(), MappedVarData())); + Data.try_emplace(Pair.getFirst()); } } Rt.emitGenericVarsProlog(CGF, Loc); @@ -2025,7 +2025,7 @@ void CGOpenMPRuntimeGPU::emitFunctionProlog(CodeGenFunction &CGF, DeclToAddrMapTy &Data = I->getSecond().LocalVarData; for (const ValueDecl *VD : VarChecker.getEscapedDecls()) { assert(VD->isCanonicalDecl() && "Expected canonical declaration"); - Data.insert(std::make_pair(VD, MappedVarData())); + Data.try_emplace(VD); } if (!NeedToDelayGlobalization) { emitGenericVarsProlog(CGF, D->getBeginLoc()); diff --git a/clang/lib/Lex/PPLexerChange.cpp b/clang/lib/Lex/PPLexerChange.cpp index 44b5fa8be9f1b..d8f61c02a9837 100644 --- a/clang/lib/Lex/PPLexerChange.cpp +++ b/clang/lib/Lex/PPLexerChange.cpp @@ -711,7 +711,7 @@ void Preprocessor::EnterSubmodule(Module *M, SourceLocation ImportLoc, ModMap.resolveConflicts(M, /*Complain=*/false); // If this is the first time we've entered this module, set up its state. - auto R = Submodules.insert(std::make_pair(M, SubmoduleState())); + auto R = Submodules.try_emplace(M); auto &State = R.first->second; bool FirstTime = R.second; if (FirstTime) { diff --git a/clang/lib/Lex/Preprocessor.cpp b/clang/lib/Lex/Preprocessor.cpp index 4c2dbbe881b48..21fc7a2b6fae2 100644 --- a/clang/lib/Lex/Preprocessor.cpp +++ b/clang/lib/Lex/Preprocessor.cpp @@ -319,7 +319,7 @@ Preprocessor::macro_begin(bool IncludeExternalMacros) const { // Make sure we cover all macros in visible modules. for (const ModuleMacro &Macro : ModuleMacros) - CurSubmoduleState->Macros.insert(std::make_pair(Macro.II, MacroState())); + CurSubmoduleState->Macros.try_emplace(Macro.II); return CurSubmoduleState->Macros.begin(); } diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index 6dae243b520f0..d47c1d39adf92 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -20342,7 +20342,7 @@ bool Sema::IsValueInFlagEnum(const EnumDecl *ED, const llvm::APInt &Val, assert(ED->isClosedFlag() && "looking for value in non-flag or open enum"); assert(ED->isCompleteDefinition() && "expected enum definition"); - auto R = FlagBitsCache.insert(std::make_pair(ED, llvm::APInt())); + auto R = FlagBitsCache.try_emplace(ED); llvm::APInt &FlagBits = R.first->second; if (R.second) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits