Warn on empty archive files.
authorRui Ueyama <ruiu@google.com>
Wed, 28 Sep 2016 21:10:54 +0000 (21:10 +0000)
committerRui Ueyama <ruiu@google.com>
Wed, 28 Sep 2016 21:10:54 +0000 (21:10 +0000)
Differential Revision: https://reviews.llvm.org/D25044

llvm-svn: 282633

lld/ELF/InputFiles.cpp
lld/test/ELF/empty-archive.s

index d15a705..9ec47a0 100644 (file)
@@ -427,8 +427,17 @@ template <class ELFT> 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<ELFT>::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 ffb0a78..a5ac59a 100644 (file)
@@ -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.