Author: chapuni Date: Sat Jul 29 22:06:26 2017 New Revision: 309501 URL: http://llvm.org/viewvc/llvm-project?rev=309501&view=rev Log: CodeGenModule.cpp: [PR33810][Modules] Avoid reusing FoundStr to try to fix crash.
MangledDeclNames might grow up and be reallocated when it were reused by reentering CodeGenModule::getMangledName(). Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CodeGenModule.cpp?rev=309501&r1=309500&r2=309501&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original) +++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Sat Jul 29 22:06:26 2017 @@ -712,9 +712,9 @@ StringRef CodeGenModule::getMangledName( } } - StringRef &FoundStr = MangledDeclNames[CanonicalGD]; - if (!FoundStr.empty()) - return FoundStr; + auto FoundName = MangledDeclNames.find(CanonicalGD); + if (FoundName != MangledDeclNames.end()) + return FoundName->second; const auto *ND = cast<NamedDecl>(GD.getDecl()); SmallString<256> Buffer; @@ -745,9 +745,9 @@ StringRef CodeGenModule::getMangledName( // Keep the first result in the case of a mangling collision. auto Result = Manglings.insert(std::make_pair(Str, GD)); - assert(&FoundStr == &MangledDeclNames[CanonicalGD] && "FoundStr is invalidated!"); - assert(FoundStr.empty() && "FoundStr is not empty!"); - return FoundStr = Result.first->first(); + assert(MangledDeclNames.find(CanonicalGD) == MangledDeclNames.end() && + "CanonicalGD is already mangled."); + return MangledDeclNames[CanonicalGD] = Result.first->first(); } StringRef CodeGenModule::getBlockMangledName(GlobalDecl GD, _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits