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:
parent
95f003003d
commit
6e4d774b02
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue