[PATCH] D25111: Improve error check for an empty archive.
Rui Ueyama via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 30 10:49:58 PDT 2016
ruiu updated this revision to Diff 73094.
ruiu added a comment.
- Updated as per Rafael's comment. This patch needs another patch to LLVM to define Archive::isEmpty which is just this.
bool Archive::isEmpty() const { return Data.getBufferSize() == 8; }
https://reviews.llvm.org/D25111
Files:
ELF/InputFiles.cpp
test/ELF/empty-archive.s
test/ELF/lto/archive.ll
Index: test/ELF/lto/archive.ll
===================================================================
--- test/ELF/lto/archive.ll
+++ test/ELF/lto/archive.ll
@@ -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"
Index: test/ELF/empty-archive.s
===================================================================
--- test/ELF/empty-archive.s
+++ test/ELF/empty-archive.s
@@ -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: ELF/InputFiles.cpp
===================================================================
--- ELF/InputFiles.cpp
+++ ELF/InputFiles.cpp
@@ -425,18 +425,16 @@
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.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D25111.73094.patch
Type: text/x-patch
Size: 2325 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160930/08834aa1/attachment.bin>
More information about the llvm-commits
mailing list