summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Linker/LinkModules.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2014-12-08 18:05:48 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2014-12-08 18:05:48 +0000
commitbeadd56a7d4fb234699b95575fcbf2a8ff64498e (patch)
treee02792cd789cfa9e339d7766c10e58d99972b645 /llvm/lib/Linker/LinkModules.cpp
parent61ba2e3996120a08deef823dccd7e8d8cd9c4332 (diff)
downloadbcm5719-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/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 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) {
OpenPOWER on IntegriCloud