Index: lld/trunk/ELF/InputFiles.cpp =================================================================== --- lld/trunk/ELF/InputFiles.cpp +++ lld/trunk/ELF/InputFiles.cpp @@ -427,8 +427,17 @@ File = check(Archive::create(MB), "failed to parse archive"); // Read the symbol table to construct Lazy objects. - for (const Archive::Symbol &Sym : File->symbols()) + bool IsEmpty = true; + for (const Archive::Symbol &Sym : File->symbols()) { Symtab::X->addLazyArchive(this, Sym); + IsEmpty = false; + } + + if (IsEmpty) + warning(getName() + " has no symbol. Chances are you are doing " + "an LTO build and forgot to use an ar command that can create " + "a symbol table for LLVM bitcode files. If so, use llvm-ar or " + "GNU ar + plugin."); } // Returns a buffer pointing to a member file containing a given symbol. Index: lld/trunk/test/ELF/empty-archive.s =================================================================== --- lld/trunk/test/ELF/empty-archive.s +++ lld/trunk/test/ELF/empty-archive.s @@ -1,3 +1,5 @@ // RUN: llvm-ar rc %t.a // RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o -// RUN: ld.lld -shared %t.o %t.a -o t +// RUN: ld.lld -shared %t.o %t.a -o t 2>&1 | FileCheck %s + +// CHECK: has no symbol.