From 0fd9e5f719d6a703f9bcf9bcb86ca88c73ea1acc Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Wed, 14 Jan 2015 19:43:32 +0000 Subject: [PATCH] Fix handling of extern_weak. This was broken by r225983. llvm-svn: 226026 --- llvm/test/tools/gold/emit-llvm.ll | 8 ++++++++ llvm/tools/gold/gold-plugin.cpp | 6 ++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/llvm/test/tools/gold/emit-llvm.ll b/llvm/test/tools/gold/emit-llvm.ll index cfdc55108c0b..2d8516c54f67 100644 --- a/llvm/test/tools/gold/emit-llvm.ll +++ b/llvm/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/llvm/tools/gold/gold-plugin.cpp b/llvm/tools/gold/gold-plugin.cpp index bcc91e9d0612..4c21b38c1520 100644 --- a/llvm/tools/gold/gold-plugin.cpp +++ b/llvm/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: {