diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp index d15a705a86ed..9ec47a05bd07 100644 --- a/lld/ELF/InputFiles.cpp +++ b/lld/ELF/InputFiles.cpp @@ -427,8 +427,17 @@ template void ArchiveFile::parse() { 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. diff --git a/lld/test/ELF/empty-archive.s b/lld/test/ELF/empty-archive.s index ffb0a7814419..a5ac59aea1db 100644 --- a/lld/test/ELF/empty-archive.s +++ b/lld/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.