[llvm] r242162 - llvm-ar: Don't try to extract from thin archives.

Rafael Espindola rafael.espindola at gmail.com
Tue Jul 14 09:55:13 PDT 2015


Author: rafael
Date: Tue Jul 14 11:55:13 2015
New Revision: 242162

URL: http://llvm.org/viewvc/llvm-project?rev=242162&view=rev
Log:
llvm-ar: Don't try to extract from thin archives.

This matches the gnu ar behavior.

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

Modified: llvm/trunk/include/llvm/Object/Archive.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/Archive.h?rev=242162&r1=242161&r2=242162&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Object/Archive.h (original)
+++ llvm/trunk/include/llvm/Object/Archive.h Tue Jul 14 11:55:13 2015
@@ -183,6 +183,7 @@ public:
   };
 
   Kind kind() const { return (Kind)Format; }
+  bool isThin() const { return IsThin; }
 
   child_iterator child_begin(bool SkipInternal = true) const;
   child_iterator child_end() const;

Modified: llvm/trunk/test/Object/archive-extract.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/archive-extract.test?rev=242162&r1=242161&r2=242162&view=diff
==============================================================================
--- llvm/trunk/test/Object/archive-extract.test (original)
+++ llvm/trunk/test/Object/archive-extract.test Tue Jul 14 11:55:13 2015
@@ -45,3 +45,6 @@ CHECK: 1465 2004-11-19 03:01:31.00000000
 
 RUN: not llvm-ar x %p/Inputs/GNU.a foo.o 2>&1 | FileCheck --check-prefix=NOTFOUND %s
 NOTFOUND: foo.o was not found
+
+RUN: not llvm-ar x %p/Inputs/thin.a foo.o 2>&1 | FileCheck %s --check-prefix=THINEXTRACT
+THINEXTRACT: extracting from a thin archive is not supported

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=242162&r1=242161&r2=242162&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-ar/llvm-ar.cpp (original)
+++ llvm/trunk/tools/llvm-ar/llvm-ar.cpp Tue Jul 14 11:55:13 2015
@@ -391,6 +391,11 @@ static bool shouldCreateArchive(ArchiveO
 
 static void performReadOperation(ArchiveOperation Operation,
                                  object::Archive *OldArchive) {
+  if (Operation == Extract && OldArchive->isThin()) {
+    errs() << "extracting from a thin archive is not supported\n";
+    std::exit(1);
+  }
+
   bool Filter = !Members.empty();
   for (const object::Archive::Child &C : OldArchive->children()) {
     ErrorOr<StringRef> NameOrErr = C.getName();





More information about the llvm-commits mailing list