diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.h b/clang/lib/CodeGen/CGOpenMPRuntime.h --- a/clang/lib/CodeGen/CGOpenMPRuntime.h +++ b/clang/lib/CodeGen/CGOpenMPRuntime.h @@ -253,8 +253,8 @@ public: UntiedTaskLocalDeclsRAII( CodeGenFunction &CGF, - const llvm::DenseMap, - std::pair> &LocalVars); + const llvm::MapVector, + std::pair> &LocalVars); ~UntiedTaskLocalDeclsRAII(); }; @@ -723,8 +723,8 @@ llvm::SmallVector NontemporalDeclsStack; using UntiedLocalVarsAddressesMap = - llvm::DenseMap, - std::pair>; + llvm::MapVector, + std::pair>; llvm::SmallVector UntiedLocalVarsStack; /// Stack for list of addresses of declarations in current context marked as diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp b/clang/lib/CodeGen/CGOpenMPRuntime.cpp --- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp +++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp @@ -12107,8 +12107,8 @@ CGOpenMPRuntime::UntiedTaskLocalDeclsRAII::UntiedTaskLocalDeclsRAII( CodeGenFunction &CGF, - const llvm::DenseMap, - std::pair> &LocalVars) + const llvm::MapVector, + std::pair> &LocalVars) : CGM(CGF.CGM), NeedToPush(!LocalVars.empty()) { if (!NeedToPush) return; diff --git a/clang/lib/CodeGen/CGStmtOpenMP.cpp b/clang/lib/CodeGen/CGStmtOpenMP.cpp --- a/clang/lib/CodeGen/CGStmtOpenMP.cpp +++ b/clang/lib/CodeGen/CGStmtOpenMP.cpp @@ -4339,7 +4339,8 @@ auto &&CodeGen = [&Data, &S, CS, &BodyGen, &LastprivateDstsOrigs, CapturedRegion](CodeGenFunction &CGF, PrePostActionTy &Action) { - llvm::DenseMap, std::pair> + llvm::MapVector, + std::pair> UntiedLocalVars; // Set proper addresses for generated private copies. OMPPrivateScope Scope(CGF); @@ -4392,7 +4393,12 @@ Ty = CGF.getContext().getPointerType(Ty); Address PrivatePtr = CGF.CreateMemTemp( CGF.getContext().getPointerType(Ty), ".local.ptr.addr"); - UntiedLocalVars.try_emplace(VD, PrivatePtr, Address::invalid()); + auto Result = UntiedLocalVars.insert( + std::make_pair(VD, std::make_pair(PrivatePtr, Address::invalid()))); + // If key exists update in place. + if (Result.second == false) + *Result.first = std::make_pair( + VD, std::make_pair(PrivatePtr, Address::invalid())); CallArgs.push_back(PrivatePtr.getPointer()); ParamTypes.push_back(PrivatePtr.getType()); } @@ -4424,14 +4430,14 @@ if (isAllocatableDecl(Pair.first)) { llvm::Value *Ptr = CGF.Builder.CreateLoad(Pair.second.first); Address Replacement(Ptr, CGF.getPointerAlign()); - Pair.getSecond().first = Replacement; + Pair.second.first = Replacement; Ptr = CGF.Builder.CreateLoad(Replacement); Replacement = Address(Ptr, CGF.getContext().getDeclAlign(Pair.first)); - Pair.getSecond().second = Replacement; + Pair.second.second = Replacement; } else { llvm::Value *Ptr = CGF.Builder.CreateLoad(Pair.second.first); Address Replacement(Ptr, CGF.getContext().getDeclAlign(Pair.first)); - Pair.getSecond().first = Replacement; + Pair.second.first = Replacement; } } }