From: Rafael Espindola Date: Wed, 14 Jan 2015 19:43:32 +0000 (+0000) Subject: Fix handling of extern_weak. This was broken by r225983. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=55c86a8cdc06be496864012dfd67a1bd047cb7c3;p=oota-llvm.git Fix handling of extern_weak. This was broken by r225983. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@226026 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/tools/gold/emit-llvm.ll b/test/tools/gold/emit-llvm.ll index cfdc55108c0..2d8516c54f6 100644 --- a/test/tools/gold/emit-llvm.ll +++ b/test/tools/gold/emit-llvm.ll @@ -21,6 +21,9 @@ target triple = "x86_64-unknown-linux-gnu" +@g7 = extern_weak global i32 +; CHECK-DAG: @g7 = extern_weak global i32 + ; CHECK: define internal void @f1() ; OPT-NOT: @f1 define hidden void @f1() { @@ -62,6 +65,9 @@ define linkonce_odr void @f6() unnamed_addr { } @g6 = global void()* @f6 +define i32* @f7() { + ret i32* @g7 +} ; API: f1 PREVAILING_DEF_IRONLY ; API: f2 PREVAILING_DEF_IRONLY @@ -69,5 +75,7 @@ define linkonce_odr void @f6() unnamed_addr { ; API: f4 PREVAILING_DEF_IRONLY_EXP ; API: f5 PREVAILING_DEF_IRONLY_EXP ; API: f6 PREVAILING_DEF_IRONLY_EXP +; API: f7 PREVAILING_DEF_IRONLY_EXP +; API: g7 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 bcc91e9d061..4c21b38c152 100644 --- a/tools/gold/gold-plugin.cpp +++ b/tools/gold/gold-plugin.cpp @@ -633,8 +633,10 @@ getModuleForFile(LLVMContext &Context, claimed_file &F, raw_fd_ostream *ApiFile, break; case LDPR_UNDEF: - assert(GV->hasComdat()); - Drop.insert(GV); + if (!GV->hasExternalWeakLinkage()) { + assert(GV->hasComdat()); + Drop.insert(GV); + } break; case LDPR_PREVAILING_DEF_IRONLY: {