diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2015-03-06 00:50:21 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2015-03-06 00:50:21 +0000 |
| commit | a5b9e1cf39f76de64b0a28e177006c93c961583d (patch) | |
| tree | d3bd63679756be5728db10ff5f67f30c2ab3a0da /llvm/lib/Linker/LinkModules.cpp | |
| parent | 07e51cc72d867e18e752dc2e9d0278c103cdd58d (diff) | |
| download | bcm5719-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.cpp | 9 |
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); |

