Index: lld/trunk/ELF/Driver.cpp =================================================================== --- lld/trunk/ELF/Driver.cpp +++ lld/trunk/ELF/Driver.cpp @@ -99,21 +99,24 @@ std::vector LinkerDriver::getArchiveMembers(MemoryBufferRef MB) { std::unique_ptr File = - check(Archive::create(MB), "failed to parse archive"); + check(Archive::create(MB), + MB.getBufferIdentifier() + ": failed to parse archive"); std::vector V; Error Err = Error::success(); for (const ErrorOr &COrErr : File->children(Err)) { - Archive::Child C = check(COrErr, "could not get the child of the archive " + - File->getFileName()); + Archive::Child C = + check(COrErr, MB.getBufferIdentifier() + + ": could not get the child of the archive"); MemoryBufferRef MBRef = check(C.getMemoryBufferRef(), - "could not get the buffer for a child of the archive " + - File->getFileName()); + MB.getBufferIdentifier() + + ": could not get the buffer for a child of the archive"); V.push_back(MBRef); } if (Err) - fatal("Archive::children failed: " + toString(std::move(Err))); + fatal(MB.getBufferIdentifier() + ": Archive::children failed: " + + toString(std::move(Err))); // Take ownership of memory buffers created for members of thin archives. for (std::unique_ptr &MB : File->takeThinBuffers()) Index: lld/trunk/ELF/InputFiles.cpp =================================================================== --- lld/trunk/ELF/InputFiles.cpp +++ lld/trunk/ELF/InputFiles.cpp @@ -482,7 +482,8 @@ } template void ArchiveFile::parse() { - File = check(Archive::create(MB), "failed to parse archive"); + File = check(Archive::create(MB), + MB.getBufferIdentifier() + ": failed to parse archive"); // Read the symbol table to construct Lazy objects. for (const Archive::Symbol &Sym : File->symbols()) Index: lld/trunk/test/ELF/bad-archive.s =================================================================== --- lld/trunk/test/ELF/bad-archive.s +++ lld/trunk/test/ELF/bad-archive.s @@ -0,0 +1,13 @@ +// REQUIRES: x86 + +// Check bad archive error reporting with --whole-archive +// and without it. +// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o +// RUN: echo "!" > %t.bad.a +// RUN: echo "bad archive" >> %t.bad.a +// RUN: not ld.lld %t.o %t.bad.a -o %t 2>&1 | FileCheck %s +// RUN: not ld.lld %t.o --whole-archive %t.bad.a -o %t 2>&1 | FileCheck %s +// CHECK: {{.*}}.bad.a: failed to parse archive + +.globl _start +_start: