Index: COFF/InputFiles.cpp =================================================================== --- COFF/InputFiles.cpp +++ COFF/InputFiles.cpp @@ -233,6 +233,12 @@ return Symtab->addRegular(this, Name, Sym.getGeneric(), SC); return Symtab->addUndefined(Name, this, false); } + if (SC == PendingComdat) { + StringRef Name; + COFFObj->getSymbolName(Sym, Name); + log("comdat section " + Name + " without leader and unassociated, discarding"); + return nullptr; + } if (SC) return make(this, /*Name*/ "", false, /*IsExternal*/ false, Sym.getGeneric(), SC); Index: test/COFF/pending-comdat.s =================================================================== --- /dev/null +++ test/COFF/pending-comdat.s @@ -0,0 +1,21 @@ +# REQUIRES: x86 + +# RUN: llvm-mc -triple=x86_64-windows-gnu %s -filetype=obj -o %t.obj + +# RUN: not lld-link -lldmingw -out:%t.exe -entry:main -subsystem:console %t.obj 2>&1 | FileCheck %s + +# CHECK: error: undefined symbol: other + +# Check that the comdat section without a symbol isn't left pending once we iterate symbols +# to print source of the undefined symbol. + + .text + .globl main +main: + call other + ret + + .section .data$pending,"w" + .linkonce discard +.Llocal: + .byte 0