mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-23 12:40:17 +00:00
Fix a crasher where when we're attempting to replace a type
during the finalization for CGDebugInfo in clang we would RAUW a type and it would result in a corrupted MDNode for an imported declaration. Testcase pending as reducing has been difficult. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@202540 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
80883b6a27
commit
ede487cdb4
@ -72,7 +72,7 @@ namespace llvm {
|
||||
SmallVector<TrackingVH<MDNode>, 4> AllRetainTypes;
|
||||
SmallVector<Value *, 4> AllSubprograms;
|
||||
SmallVector<Value *, 4> AllGVs;
|
||||
SmallVector<Value *, 4> AllImportedModules;
|
||||
SmallVector<TrackingVH<MDNode>, 4> AllImportedModules;
|
||||
|
||||
// Private use for multiple types of template parameters.
|
||||
DITemplateValueParameter
|
||||
|
@ -69,7 +69,10 @@ void DIBuilder::finalize() {
|
||||
DIArray GVs = getOrCreateArray(AllGVs);
|
||||
DIType(TempGVs).replaceAllUsesWith(GVs);
|
||||
|
||||
DIArray IMs = getOrCreateArray(AllImportedModules);
|
||||
SmallVector<Value *, 16> RetainValuesI;
|
||||
for (unsigned I = 0, E = AllImportedModules.size(); I < E; I++)
|
||||
RetainValuesI.push_back(AllImportedModules[I]);
|
||||
DIArray IMs = getOrCreateArray(RetainValuesI);
|
||||
DIType(TempImportedModules).replaceAllUsesWith(IMs);
|
||||
}
|
||||
|
||||
@ -145,7 +148,7 @@ DICompileUnit DIBuilder::createCompileUnit(unsigned Lang, StringRef Filename,
|
||||
static DIImportedEntity
|
||||
createImportedModule(LLVMContext &C, DIScope Context, DIDescriptor NS,
|
||||
unsigned Line, StringRef Name,
|
||||
SmallVectorImpl<Value *> &AllImportedModules) {
|
||||
SmallVectorImpl<TrackingVH<MDNode>> &AllImportedModules) {
|
||||
const MDNode *R;
|
||||
if (Name.empty()) {
|
||||
Value *Elts[] = {
|
||||
@ -167,7 +170,7 @@ createImportedModule(LLVMContext &C, DIScope Context, DIDescriptor NS,
|
||||
}
|
||||
DIImportedEntity M(R);
|
||||
assert(M.Verify() && "Imported module should be valid");
|
||||
AllImportedModules.push_back(M);
|
||||
AllImportedModules.push_back(TrackingVH<MDNode>(M));
|
||||
return M;
|
||||
}
|
||||
|
||||
@ -197,7 +200,7 @@ DIImportedEntity DIBuilder::createImportedDeclaration(DIScope Context,
|
||||
};
|
||||
DIImportedEntity M(MDNode::get(VMContext, Elts));
|
||||
assert(M.Verify() && "Imported module should be valid");
|
||||
AllImportedModules.push_back(M);
|
||||
AllImportedModules.push_back(TrackingVH<MDNode>(M));
|
||||
return M;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user