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
This commit is contained in:
Rafael Espindola 2015-01-14 13:53:50 +00:00
parent 81e68c9023
commit 5f92811f30
2 changed files with 10 additions and 1 deletions

View File

@ -1,4 +1,9 @@
$c2 = comdat any $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) @v1 = weak_odr global i32 41, comdat($c2)
define weak_odr protected i32 @f1(i8* %this) comdat($c2) { define weak_odr protected i32 @f1(i8* %this) comdat($c2) {

View File

@ -629,10 +629,14 @@ getModuleForFile(LLVMContext &Context, claimed_file &F, raw_fd_ostream *ApiFile,
case LDPR_RESOLVED_IR: case LDPR_RESOLVED_IR:
case LDPR_RESOLVED_EXEC: case LDPR_RESOLVED_EXEC:
case LDPR_RESOLVED_DYN: case LDPR_RESOLVED_DYN:
case LDPR_UNDEF:
assert(GV->isDeclarationForLinker()); assert(GV->isDeclarationForLinker());
break; break;
case LDPR_UNDEF:
assert(GV->hasComdat());
Drop.insert(GV);
break;
case LDPR_PREVAILING_DEF_IRONLY: { case LDPR_PREVAILING_DEF_IRONLY: {
keepGlobalValue(*GV, KeptAliases); keepGlobalValue(*GV, KeptAliases);
if (!Used.count(GV)) { if (!Used.count(GV)) {