Index: ELF/Writer.cpp =================================================================== --- ELF/Writer.cpp +++ ELF/Writer.cpp @@ -308,7 +308,8 @@ } template -static bool shouldKeepInSymtab(InputSectionBase *Sec, StringRef SymName, +static bool shouldKeepInSymtab(elf::ObjectFile *F, + InputSectionBase *Sec, StringRef SymName, const SymbolBody &B) { if (B.isFile()) return false; @@ -335,6 +336,9 @@ if (Config->Discard == DiscardPolicy::Locals) return false; + if (!Sec) + fatal(getFilename(F) + ": object contains invalid symbols"); + return !(Sec->getSectionHdr()->sh_flags & SHF_MERGE); } @@ -374,7 +378,7 @@ fatal(getFilename(F) + ": invalid symbol name offset"); StringRef SymName(StrTab.data() + B->getNameOffset()); InputSectionBase *Sec = DR->Section; - if (!shouldKeepInSymtab(Sec, SymName, *B)) + if (!shouldKeepInSymtab(F, Sec, SymName, *B)) continue; ++Out::SymTab->NumLocals; if (Config->Relocatable) Index: test/ELF/invalid/local-symbols.s =================================================================== --- test/ELF/invalid/local-symbols.s +++ test/ELF/invalid/local-symbols.s @@ -0,0 +1,3 @@ +## local-symbols.elf has invalid local symbol. +# RUN: not ld.lld %p/Inputs/local-symbols.elf -o %t2 2>&1 | FileCheck %s +# CHECK: object contains invalid symbols