From 5f92811f305a3fe9ce90199f68a1026123bc8d51 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Wed, 14 Jan 2015 13:53:50 +0000 Subject: [PATCH] Handle a symbol being undefined. This can happen if: * It is present in a comdat in one file. * It is not present in the comdat of the file that is kept. * Is is not used. This should fix the LTO boostrap. Thanks to Takumi NAKAMURA for setting up the bot! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225983 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/tools/gold/Inputs/comdat.ll | 5 +++++ tools/gold/gold-plugin.cpp | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/test/tools/gold/Inputs/comdat.ll b/test/tools/gold/Inputs/comdat.ll index 8b699d439c5..464aefa49dc 100644 --- a/test/tools/gold/Inputs/comdat.ll +++ b/test/tools/gold/Inputs/comdat.ll @@ -1,4 +1,9 @@ $c2 = comdat any +$c1 = comdat any + +; This is only present in this file. The linker will keep $c1 from the first +; file and this will be undefined. +@will_be_undefined = global i32 1, comdat($c1) @v1 = weak_odr global i32 41, comdat($c2) define weak_odr protected i32 @f1(i8* %this) comdat($c2) { diff --git a/tools/gold/gold-plugin.cpp b/tools/gold/gold-plugin.cpp index 1ba08cc53dc..bcc91e9d061 100644 --- a/tools/gold/gold-plugin.cpp +++ b/tools/gold/gold-plugin.cpp @@ -629,10 +629,14 @@ getModuleForFile(LLVMContext &Context, claimed_file &F, raw_fd_ostream *ApiFile, case LDPR_RESOLVED_IR: case LDPR_RESOLVED_EXEC: case LDPR_RESOLVED_DYN: - case LDPR_UNDEF: assert(GV->isDeclarationForLinker()); break; + case LDPR_UNDEF: + assert(GV->hasComdat()); + Drop.insert(GV); + break; + case LDPR_PREVAILING_DEF_IRONLY: { keepGlobalValue(*GV, KeptAliases); if (!Used.count(GV)) {