From: Rafael Espindola Date: Tue, 14 Jul 2015 16:55:13 +0000 (+0000) Subject: llvm-ar: Don't try to extract from thin archives. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=6e9f427cb2916cebfac98fc8e0da1dab7f095556;p=oota-llvm.git llvm-ar: Don't try to extract from thin archives. This matches the gnu ar behavior. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@242162 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Object/Archive.h b/include/llvm/Object/Archive.h index 0745eaf5c6e..e461564ace8 100644 --- a/include/llvm/Object/Archive.h +++ b/include/llvm/Object/Archive.h @@ -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; diff --git a/test/Object/archive-extract.test b/test/Object/archive-extract.test index 606fc753c33..c1ddcf71725 100644 --- a/test/Object/archive-extract.test +++ b/test/Object/archive-extract.test @@ -45,3 +45,6 @@ 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 + +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 diff --git a/tools/llvm-ar/llvm-ar.cpp b/tools/llvm-ar/llvm-ar.cpp index 50ddf598efe..c87606d7826 100644 --- a/tools/llvm-ar/llvm-ar.cpp +++ b/tools/llvm-ar/llvm-ar.cpp @@ -391,6 +391,11 @@ static bool shouldCreateArchive(ArchiveOperation Op) { 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 NameOrErr = C.getName();