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().

llvm-svn: 309501
This commit is contained in:
NAKAMURA Takumi 2017-07-30 05:06:26 +00:00
parent 95f003003d
commit 6e4d774b02
1 changed files with 6 additions and 6 deletions

View File

@ -712,9 +712,9 @@ StringRef CodeGenModule::getMangledName(GlobalDecl GD) {
}
}
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(GlobalDecl GD) {
// 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,