diff options
-rw-r--r-- | llvm/lib/Linker/LinkModules.cpp | 4 | ||||
-rw-r--r-- | llvm/test/Transforms/FunctionImport/funcimport.ll | 6 |
2 files changed, 8 insertions, 2 deletions
diff --git a/llvm/lib/Linker/LinkModules.cpp b/llvm/lib/Linker/LinkModules.cpp index f97bbe5a8e5..8970fe44613 100644 --- a/llvm/lib/Linker/LinkModules.cpp +++ b/llvm/lib/Linker/LinkModules.cpp @@ -517,11 +517,11 @@ private: GlobalValue *getLinkedToGlobal(const GlobalValue *SrcGV) { // If the source has no name it can't link. If it has local linkage, // there is no name match-up going on. - if (!SrcGV->hasName() || SrcGV->hasLocalLinkage()) + if (!SrcGV->hasName() || GlobalValue::isLocalLinkage(getLinkage(SrcGV))) return nullptr; // Otherwise see if we have a match in the destination module's symtab. - GlobalValue *DGV = DstM->getNamedValue(SrcGV->getName()); + GlobalValue *DGV = DstM->getNamedValue(getName(SrcGV)); if (!DGV) return nullptr; diff --git a/llvm/test/Transforms/FunctionImport/funcimport.ll b/llvm/test/Transforms/FunctionImport/funcimport.ll index 8d790520e33..43b2fb7919d 100644 --- a/llvm/test/Transforms/FunctionImport/funcimport.ll +++ b/llvm/test/Transforms/FunctionImport/funcimport.ll @@ -43,6 +43,12 @@ declare void @setfuncptr(...) #1 ; CHECK-DAG: define available_externally void @callfuncptr() declare void @callfuncptr(...) #1 +; Ensure that all uses of local variable @P which has used in setfuncptr +; and callfuncptr are to the same promoted/renamed global. +; CHECK-DAG: @P.llvm.2 = available_externally hidden global void ()* null +; CHECK-DAG: %0 = load void ()*, void ()** @P.llvm.2, +; CHECK-DAG: store void ()* @staticfunc2.llvm.2, void ()** @P.llvm.2, + ; Won't import weak func ; CHECK-DAG: declare void @weakfunc(...) declare void @weakfunc(...) #1 |