diff --git a/lib/Linker/LinkModules.cpp b/lib/Linker/LinkModules.cpp index 1970e7fa069..5c26b2610b1 100644 --- a/lib/Linker/LinkModules.cpp +++ b/lib/Linker/LinkModules.cpp @@ -546,6 +546,11 @@ Value *ValueMaterializerTy::materializeValueFor(Value *V) { SF->getLinkage(), SF->getName(), DstM); copyGVAttributes(DF, SF); + if (Comdat *SC = SF->getComdat()) { + Comdat *DC = DstM->getOrInsertComdat(SC->getName()); + DF->setComdat(DC); + } + LazilyLinkFunctions.push_back(SF); return DF; } diff --git a/test/Linker/Inputs/comdat9.ll b/test/Linker/Inputs/comdat9.ll new file mode 100644 index 00000000000..679dbde98c3 --- /dev/null +++ b/test/Linker/Inputs/comdat9.ll @@ -0,0 +1,5 @@ +$c = comdat any +@a = alias void ()* @f +define internal void @f() comdat $c { + ret void +} diff --git a/test/Linker/comdat9.ll b/test/Linker/comdat9.ll new file mode 100644 index 00000000000..eada8c62bef --- /dev/null +++ b/test/Linker/comdat9.ll @@ -0,0 +1,7 @@ +; RUN: llvm-link %s %p/Inputs/comdat9.ll -S -o - | FileCheck %s + +; CHECK: $c = comdat any +; CHECK: @a = alias void ()* @f +; CHECK: define internal void @f() comdat $c { +; CHECK: ret void +; CHECK: }