diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2014-12-08 18:05:48 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2014-12-08 18:05:48 +0000 |
commit | beadd56a7d4fb234699b95575fcbf2a8ff64498e (patch) | |
tree | e02792cd789cfa9e339d7766c10e58d99972b645 /llvm/lib | |
parent | 61ba2e3996120a08deef823dccd7e8d8cd9c4332 (diff) | |
download | bcm5719-llvm-beadd56a7d4fb234699b95575fcbf2a8ff64498e.tar.gz bcm5719-llvm-beadd56a7d4fb234699b95575fcbf2a8ff64498e.zip |
Don't crash when the key of a comdat is lazily linked.
llvm-svn: 223673
Diffstat (limited to 'llvm/lib')
-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 06710240c94..331fdad9000 100644 --- a/llvm/lib/Linker/LinkModules.cpp +++ b/llvm/lib/Linker/LinkModules.cpp @@ -1482,6 +1482,15 @@ bool ModuleLinker::run() { for (unsigned i = 0, e = AppendingVars.size(); i != e; ++i) linkAppendingVarInit(AppendingVars[i]); + for (const auto &Entry : DstM->getComdatSymbolTable()) { + const Comdat &C = Entry.getValue(); + if (C.getSelectionKind() == Comdat::Any) + continue; + const GlobalValue *GV = SrcM->getNamedValue(C.getName()); + assert(GV); + MapValue(GV, ValueMap, RF_None, &TypeMap, &ValMaterializer); + } + // Link in the function bodies that are defined in the source module into // DstM. for (Function &SF : *SrcM) { |