summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Linker
diff options
context:
space:
mode:
authorMehdi Amini <mehdi.amini@apple.com>2016-11-19 18:44:16 +0000
committerMehdi Amini <mehdi.amini@apple.com>2016-11-19 18:44:16 +0000
commitfec21582921cd27bdb00ce68e75d8cdd23c96009 (patch)
treebfbcd57db11751c0c44d10833709944ac8d63fb3 /llvm/lib/Linker
parent98bdbdaedd839e5f1eaba085132118daed3a19a0 (diff)
downloadbcm5719-llvm-fec21582921cd27bdb00ce68e75d8cdd23c96009.tar.gz
bcm5719-llvm-fec21582921cd27bdb00ce68e75d8cdd23c96009.zip
[ThinLTO] Fix crash when importing an opaque type
It seems that because ThinLTO does not import the full module, some invariant of the type mapper are broken. In Monolithic LTO, we import every globals: when calling IRLinker::copyFunctionProto() on @foo(), we end-up calling TypeMapTy::get(FTy) on the type of @foo(), which will map %0 and record the destination as opaque. ThinLTO skips this because @foo is not imported and goes directly to the next stage. Next we call computeTypeMapping() that map the types for each globals, and ends up checking for type isomorphism, and may add type mapping. However it doesn't record if there was an opaque destination type that was resolved. Instead of lazily "discovering" opaque type in the destination module on the go, we change the TypeFinder to eagerly record all types and not only the named ones. Differential Revision: https://reviews.llvm.org/D26840 llvm-svn: 287453
Diffstat (limited to 'llvm/lib/Linker')
-rw-r--r--llvm/lib/Linker/IRMover.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/llvm/lib/Linker/IRMover.cpp b/llvm/lib/Linker/IRMover.cpp
index 4866ed2433d..ca91b1e8316 100644
--- a/llvm/lib/Linker/IRMover.cpp
+++ b/llvm/lib/Linker/IRMover.cpp
@@ -1350,7 +1350,7 @@ bool IRMover::IdentifiedStructTypeSet::hasType(StructType *Ty) {
IRMover::IRMover(Module &M) : Composite(M) {
TypeFinder StructTypes;
- StructTypes.run(M, true);
+ StructTypes.run(M, /* OnlyNamed */ false);
for (StructType *Ty : StructTypes) {
if (Ty->isOpaque())
IdentifiedStructTypes.addOpaque(Ty);
OpenPOWER on IntegriCloud