Improve error check for an empty archive.
authorRui Ueyama <ruiu@google.com>
Fri, 30 Sep 2016 17:56:20 +0000 (17:56 +0000)
committerRui Ueyama <ruiu@google.com>
Fri, 30 Sep 2016 17:56:20 +0000 (17:56 +0000)
Previously, it warned on any archive file that has no symbol.
It turned out that that is too noisy.

With this patch, it warns on such archive file that contains no file.

Differential Revision: https://reviews.llvm.org/D25111

llvm-svn: 282885

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

index 7605ab0..c1b59c1 100644 (file)
@@ -425,18 +425,16 @@ SymbolBody *elf::ObjectFile<ELFT>::createSymbolBody(const Elf_Sym *Sym) {
 template <class ELFT> void ArchiveFile::parse() {
   File = check(Archive::create(MB), "failed to parse archive");
 
+  // Checks for a common usage error of an ar command.
+  if (File->getNumberOfSymbols() == 0 && !File->isEmpty())
+    warn(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.");
+
   // Read the symbol table to construct Lazy objects.
-  bool IsEmpty = true;
-  for (const Archive::Symbol &Sym : File->symbols()) {
+  for (const Archive::Symbol &Sym : File->symbols())
     Symtab<ELFT>::X->addLazyArchive(this, Sym);
-    IsEmpty = false;
-  }
-
-  if (IsEmpty)
-    warn(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 a5ac59a..ffb0a78 100644 (file)
@@ -1,5 +1,3 @@
 // 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 2>&1 | FileCheck %s
-
-// CHECK: has no symbol.
+// RUN: ld.lld -shared %t.o %t.a -o t
index b3f69fb..da5e055 100644 (file)
@@ -8,6 +8,9 @@
 ; RUN: ld.lld -m elf_x86_64 %t2.o --whole-archive %t.a -o %t3 -shared
 ; RUN: llvm-readobj -t %t3 | FileCheck %s
 
+; RUN: llvm-ar rcS %t4.a %t1.o
+; RUN: ld.lld -m elf_x86_64 %t2.o %t4.a -o %t3 -shared 2>&1 \
+; RUN:   | FileCheck -check-prefix=WARN %s
 
 ; CHECK:      Name: g (
 ; CHECK-NEXT: Value:
@@ -25,6 +28,8 @@
 ; CHECK-NEXT: Other: 0
 ; CHECK-NEXT: Section: .text
 
+; WARN: has no symbol.
+
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"