summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Linker/LinkModules.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2015-03-06 00:50:21 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2015-03-06 00:50:21 +0000
commita5b9e1cf39f76de64b0a28e177006c93c961583d (patch)
treed3bd63679756be5728db10ff5f67f30c2ab3a0da /llvm/lib/Linker/LinkModules.cpp
parent07e51cc72d867e18e752dc2e9d0278c103cdd58d (diff)
downloadbcm5719-llvm-a5b9e1cf39f76de64b0a28e177006c93c961583d.tar.gz
bcm5719-llvm-a5b9e1cf39f76de64b0a28e177006c93c961583d.zip
Remember to move a type to the correct set when setting the body.
We would set the body of a struct type (therefore making it non-opaque) but were forgetting to move it to the non-opaque set. Fixes pr22807. llvm-svn: 231442
Diffstat (limited to 'llvm/lib/Linker/LinkModules.cpp')
-rw-r--r--llvm/lib/Linker/LinkModules.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/llvm/lib/Linker/LinkModules.cpp b/llvm/lib/Linker/LinkModules.cpp
index 7f0fdb32f7b..a81dce27ccc 100644
--- a/llvm/lib/Linker/LinkModules.cpp
+++ b/llvm/lib/Linker/LinkModules.cpp
@@ -226,6 +226,7 @@ void TypeMapTy::linkDefinedTypeBodies() {
Elements[I] = get(SrcSTy->getElementType(I));
DstSTy->setBody(Elements, SrcSTy->isPacked());
+ DstStructTypesSet.switchToNonOpaque(DstSTy);
}
SrcDefinitionsToResolve.clear();
DstResolvedOpaqueTypes.clear();
@@ -1678,6 +1679,14 @@ void Linker::IdentifiedStructTypeSet::addNonOpaque(StructType *Ty) {
NonOpaqueStructTypes.insert(Ty);
}
+void Linker::IdentifiedStructTypeSet::switchToNonOpaque(StructType *Ty) {
+ assert(!Ty->isOpaque());
+ NonOpaqueStructTypes.insert(Ty);
+ bool Removed = OpaqueStructTypes.erase(Ty);
+ (void)Removed;
+ assert(Removed);
+}
+
void Linker::IdentifiedStructTypeSet::addOpaque(StructType *Ty) {
assert(Ty->isOpaque());
OpaqueStructTypes.insert(Ty);
OpenPOWER on IntegriCloud