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

This matches the gnu ar behavior.

llvm-svn: 242162
This commit is contained in:
Rafael Espindola 2015-07-14 16:55:13 +00:00
parent b27f249601
commit e549b8c259
3 changed files with 9 additions and 0 deletions

View File

@ -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;

View File

@ -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

View File

@ -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<StringRef> NameOrErr = C.getName();