diff options
Diffstat (limited to 'llvm/lib/Linker/LinkModules.cpp')
| -rw-r--r-- | llvm/lib/Linker/LinkModules.cpp | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/llvm/lib/Linker/LinkModules.cpp b/llvm/lib/Linker/LinkModules.cpp index 8822a3ae0a5..e1dd2e12d72 100644 --- a/llvm/lib/Linker/LinkModules.cpp +++ b/llvm/lib/Linker/LinkModules.cpp @@ -58,9 +58,8 @@ class TypeMapTy : public ValueMapTypeRemapper { SmallPtrSet<StructType*, 16> DstResolvedOpaqueTypes; public: - TypeMapTy(TypeSet &Set) : DstStructTypesSet(Set) {} + TypeMapTy() {} - TypeSet &DstStructTypesSet; /// Indicate that the specified type in the destination module is conceptually /// equivalent to the specified type in the source module. void addTypeMapping(Type *DstTy, Type *SrcTy); @@ -111,6 +110,11 @@ void TypeMapTy::addTypeMapping(Type *DstTy, Type *SrcTy) { SpeculativeDstOpaqueTypes.size()); for (StructType *Ty : SpeculativeDstOpaqueTypes) DstResolvedOpaqueTypes.erase(Ty); + } else { + for (Type *Ty : SpeculativeTypes) + if (auto *STy = dyn_cast<StructType>(Ty)) + if (STy->hasName()) + STy->setName(""); } SpeculativeTypes.clear(); SpeculativeDstOpaqueTypes.clear(); @@ -306,7 +310,6 @@ Type *TypeMapTy::get(Type *Ty) { if (STy->isOpaque()) { // A named structure type from src module is used. Add it to the Set of // identified structs in the destination module. - DstStructTypesSet.insert(STy); return *Entry = STy; } @@ -314,7 +317,6 @@ Type *TypeMapTy::get(Type *Ty) { StructType *DTy = StructType::create(STy->getContext()); // A new identified structure type was created. Add it to the set of // identified structs in the destination module. - DstStructTypesSet.insert(DTy); *Entry = DTy; SmallVector<Type*, 4> ElementTypes; @@ -400,9 +402,9 @@ class ModuleLinker { Linker::DiagnosticHandlerFunction DiagnosticHandler; public: - ModuleLinker(Module *dstM, TypeSet &Set, Module *srcM, + ModuleLinker(Module *dstM, Module *srcM, Linker::DiagnosticHandlerFunction DiagnosticHandler) - : DstM(dstM), SrcM(srcM), TypeMap(Set), + : DstM(dstM), SrcM(srcM), ValMaterializer(TypeMap, DstM, LazilyLinkFunctions), DiagnosticHandler(DiagnosticHandler) {} @@ -814,7 +816,7 @@ void ModuleLinker::computeTypeMapping() { // we prefer to take the '%C' version. So we are then left with both // '%C.1' and '%C' being used for the same types. This leads to some // variables using one type and some using the other. - if (!SrcStructTypesSet.count(DST) && TypeMap.DstStructTypesSet.count(DST)) + if (!SrcStructTypesSet.count(DST)) TypeMap.addTypeMapping(DST, ST); } @@ -1576,10 +1578,6 @@ bool ModuleLinker::run() { void Linker::init(Module *M, DiagnosticHandlerFunction DiagnosticHandler) { this->Composite = M; this->DiagnosticHandler = DiagnosticHandler; - - TypeFinder StructTypes; - StructTypes.run(*M, true); - IdentifiedStructTypes.insert(StructTypes.begin(), StructTypes.end()); } Linker::Linker(Module *M, DiagnosticHandlerFunction DiagnosticHandler) { @@ -1601,8 +1599,7 @@ void Linker::deleteModule() { } bool Linker::linkInModule(Module *Src) { - ModuleLinker TheLinker(Composite, IdentifiedStructTypes, Src, - DiagnosticHandler); + ModuleLinker TheLinker(Composite, Src, DiagnosticHandler); return TheLinker.run(); } |

