Index: lld/trunk/COFF/InputFiles.cpp =================================================================== --- lld/trunk/COFF/InputFiles.cpp +++ lld/trunk/COFF/InputFiles.cpp @@ -281,6 +281,13 @@ if (auto *Def = Sym.getSectionDefinition()) if (Def->Selection == IMAGE_COMDAT_SELECT_ASSOCIATIVE) readAssociativeDefinition(Sym, Def); + if (SparseChunks[Sym.getSectionNumber()] == PendingComdat) { + StringRef Name; + COFFObj->getSymbolName(Sym, Name); + log("comdat section " + Name + + " without leader and unassociated, discarding"); + continue; + } Symbols[I] = createRegular(Sym); } Index: lld/trunk/test/COFF/pending-comdat.s =================================================================== --- lld/trunk/test/COFF/pending-comdat.s +++ lld/trunk/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