summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Linker/LinkModules.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Linker/LinkModules.cpp')
-rw-r--r--llvm/lib/Linker/LinkModules.cpp23
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();
}
OpenPOWER on IntegriCloud