summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2015-07-14 16:02:40 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2015-07-14 16:02:40 +0000
commitc3eec458ab40128ebf1e3d379b067825bb72dd71 (patch)
treeee5289795b23f50a7de2941e2cf1a9397c055a24 /llvm
parent228d149c19baeac21075975336949283b7bfd9a4 (diff)
downloadbcm5719-llvm-c3eec458ab40128ebf1e3d379b067825bb72dd71.tar.gz
bcm5719-llvm-c3eec458ab40128ebf1e3d379b067825bb72dd71.zip
llvm-ar: print an error when the requested member is not found.
llvm-svn: 242156
Diffstat (limited to 'llvm')
-rw-r--r--llvm/test/Object/archive-extract.test4
-rw-r--r--llvm/tools/llvm-ar/llvm-ar.cpp15
2 files changed, 16 insertions, 3 deletions
diff --git a/llvm/test/Object/archive-extract.test b/llvm/test/Object/archive-extract.test
index 4da2180eff3..606fc753c33 100644
--- a/llvm/test/Object/archive-extract.test
+++ b/llvm/test/Object/archive-extract.test
@@ -41,3 +41,7 @@
; RUN: env TZ=GMT llvm-ar tv %t.a | FileCheck %s
CHECK: 1465 2004-11-19 03:01:31.000000000 very_long_bytecode_file_name.bc
+
+
+RUN: not llvm-ar x %p/Inputs/GNU.a foo.o 2>&1 | FileCheck --check-prefix=NOTFOUND %s
+NOTFOUND: foo.o was not found
diff --git a/llvm/tools/llvm-ar/llvm-ar.cpp b/llvm/tools/llvm-ar/llvm-ar.cpp
index b3e5043d500..50ddf598efe 100644
--- a/llvm/tools/llvm-ar/llvm-ar.cpp
+++ b/llvm/tools/llvm-ar/llvm-ar.cpp
@@ -391,14 +391,18 @@ static bool shouldCreateArchive(ArchiveOperation Op) {
static void performReadOperation(ArchiveOperation Operation,
object::Archive *OldArchive) {
+ bool Filter = !Members.empty();
for (const object::Archive::Child &C : OldArchive->children()) {
ErrorOr<StringRef> NameOrErr = C.getName();
failIfError(NameOrErr.getError());
StringRef Name = NameOrErr.get();
- if (!Members.empty() &&
- std::find(Members.begin(), Members.end(), Name) == Members.end())
- continue;
+ if (Filter) {
+ auto I = std::find(Members.begin(), Members.end(), Name);
+ if (I == Members.end())
+ continue;
+ Members.erase(I);
+ }
switch (Operation) {
default:
@@ -414,6 +418,11 @@ static void performReadOperation(ArchiveOperation Operation,
break;
}
}
+ if (Members.empty())
+ return;
+ for (StringRef Name : Members)
+ errs() << Name << " was not found\n";
+ std::exit(1);
}
template <typename T>
OpenPOWER on IntegriCloud