From 0a2caa143f0233bcf1ba04a358f3e21a095035e0 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Wed, 14 Jan 2015 20:08:46 +0000 Subject: [PATCH] Fix linking of shared libraries. In shared libraries the plugin can see non-weak declarations that are still undefined. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@226031 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/tools/gold/emit-llvm.ll | 8 ++++++++ tools/gold/gold-plugin.cpp | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/test/tools/gold/emit-llvm.ll b/test/tools/gold/emit-llvm.ll index 2d8516c54f6..2c43147a2ea 100644 --- a/test/tools/gold/emit-llvm.ll +++ b/test/tools/gold/emit-llvm.ll @@ -24,6 +24,8 @@ target triple = "x86_64-unknown-linux-gnu" @g7 = extern_weak global i32 ; CHECK-DAG: @g7 = extern_weak global i32 +@g8 = external global i32 + ; CHECK: define internal void @f1() ; OPT-NOT: @f1 define hidden void @f1() { @@ -69,6 +71,10 @@ define i32* @f7() { ret i32* @g7 } +define i32* @f8() { + ret i32* @g8 +} + ; API: f1 PREVAILING_DEF_IRONLY ; API: f2 PREVAILING_DEF_IRONLY ; API: f3 PREVAILING_DEF_IRONLY_EXP @@ -76,6 +82,8 @@ define i32* @f7() { ; API: f5 PREVAILING_DEF_IRONLY_EXP ; API: f6 PREVAILING_DEF_IRONLY_EXP ; API: f7 PREVAILING_DEF_IRONLY_EXP +; API: f8 PREVAILING_DEF_IRONLY_EXP ; API: g7 UNDEF +; API: g8 UNDEF ; API: g5 PREVAILING_DEF_IRONLY_EXP ; API: g6 PREVAILING_DEF_IRONLY_EXP diff --git a/tools/gold/gold-plugin.cpp b/tools/gold/gold-plugin.cpp index 4c21b38c152..5524bb9922c 100644 --- a/tools/gold/gold-plugin.cpp +++ b/tools/gold/gold-plugin.cpp @@ -633,7 +633,7 @@ getModuleForFile(LLVMContext &Context, claimed_file &F, raw_fd_ostream *ApiFile, break; case LDPR_UNDEF: - if (!GV->hasExternalWeakLinkage()) { + if (!GV->isDeclarationForLinker()) { assert(GV->hasComdat()); Drop.insert(GV); }