[llvm] r242156 - llvm-ar: print an error when the requested member is not found.

Rafael Espindola rafael.espindola at gmail.com
Tue Jul 14 09:02:41 PDT 2015


Author: rafael
Date: Tue Jul 14 11:02:40 2015
New Revision: 242156

URL: http://llvm.org/viewvc/llvm-project?rev=242156&view=rev
Log:
llvm-ar: print an error when the requested member is not found.

Modified:
    llvm/trunk/test/Object/archive-extract.test
    llvm/trunk/tools/llvm-ar/llvm-ar.cpp

Modified: llvm/trunk/test/Object/archive-extract.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/archive-extract.test?rev=242156&r1=242155&r2=242156&view=diff
==============================================================================
--- llvm/trunk/test/Object/archive-extract.test (original)
+++ llvm/trunk/test/Object/archive-extract.test Tue Jul 14 11:02:40 2015
@@ -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

Modified: llvm/trunk/tools/llvm-ar/llvm-ar.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-ar/llvm-ar.cpp?rev=242156&r1=242155&r2=242156&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-ar/llvm-ar.cpp (original)
+++ llvm/trunk/tools/llvm-ar/llvm-ar.cpp Tue Jul 14 11:02:40 2015
@@ -391,14 +391,18 @@ static bool shouldCreateArchive(ArchiveO
 
 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(Archive
       break;
     }
   }
+  if (Members.empty())
+    return;
+  for (StringRef Name : Members)
+    errs() << Name << " was not found\n";
+  std::exit(1);
 }
 
 template <typename T>





More information about the llvm-commits mailing list