From: Rafael Espindola Date: Tue, 14 Jul 2015 16:02:40 +0000 (+0000) Subject: llvm-ar: print an error when the requested member is not found. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=4daa23f9a7857feb8b44b2c6f32bfbb3ca0dfbcc;p=oota-llvm.git llvm-ar: print an error when the requested member is not found. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242156 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/test/Object/archive-extract.test b/test/Object/archive-extract.test index 4da2180eff3..606fc753c33 100644 --- a/test/Object/archive-extract.test +++ b/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/tools/llvm-ar/llvm-ar.cpp b/tools/llvm-ar/llvm-ar.cpp index b3e5043d500..50ddf598efe 100644 --- a/tools/llvm-ar/llvm-ar.cpp +++ b/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 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