diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp --- a/lld/ELF/Driver.cpp +++ b/lld/ELF/Driver.cpp @@ -1681,7 +1681,8 @@ for (InputFile *file : lto->compile()) { auto *obj = cast>(file); - obj->parse(/*ignoreComdats=*/true); + // We need comdat de-duplication for thinLTO + obj->parse(/*ignoreComdats=*/false); for (Symbol *sym : obj->getGlobalSymbols()) sym->parseSymbolVersion(); objectFiles.push_back(file); diff --git a/lld/test/ELF/lto/comdat.ll b/lld/test/ELF/lto/comdat.ll --- a/lld/test/ELF/lto/comdat.ll +++ b/lld/test/ELF/lto/comdat.ll @@ -5,11 +5,11 @@ ; CHECK: Name: foo ; CHECK-NEXT: Value: -; CHECK-NEXT: Size: 1 +; CHECK-NEXT: Size: 0 ; CHECK-NEXT: Binding: Global ; CHECK-NEXT: Type: Function ; CHECK-NEXT: Other: 0 -; CHECK-NEXT: Section: .text +; CHECK-NEXT: Section: Undefined target triple = "x86_64-unknown-linux-gnu" target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" @@ -18,4 +18,3 @@ define void @foo() comdat { ret void } - diff --git a/lld/test/ELF/lto/comdat2.ll b/lld/test/ELF/lto/comdat2.ll --- a/lld/test/ELF/lto/comdat2.ll +++ b/lld/test/ELF/lto/comdat2.ll @@ -23,13 +23,13 @@ ; CHECK: Symbol { ; CHECK: Name: foo ; CHECK-NEXT: Value: -; CHECK-NEXT: Size: 1 +; CHECK-NEXT: Size: 0 ; CHECK-NEXT: Binding: Global ; CHECK-NEXT: Type: Function ; CHECK-NEXT: Other [ ; CHECK-NEXT: STV_PROTECTED ; CHECK-NEXT: ] -; CHECK-NEXT: Section: .text +; CHECK-NEXT: Section: Undefined ; CHECK-NEXT: } ; OTHER: Symbol {