summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/Object/ArchiveWriter.cpp3
-rw-r--r--llvm/test/Object/archive-format.test3
-rw-r--r--llvm/tools/llvm-ar/llvm-ar.cpp4
3 files changed, 9 insertions, 1 deletions
diff --git a/llvm/lib/Object/ArchiveWriter.cpp b/llvm/lib/Object/ArchiveWriter.cpp
index 011c9d52f23..c7737eb960f 100644
--- a/llvm/lib/Object/ArchiveWriter.cpp
+++ b/llvm/lib/Object/ArchiveWriter.cpp
@@ -308,6 +308,9 @@ llvm::writeArchive(StringRef ArcName,
std::vector<NewArchiveIterator> &NewMembers,
bool WriteSymtab, object::Archive::Kind Kind,
bool Deterministic, bool Thin) {
+ assert(!Thin ||
+ Kind == object::Archive::K_GNU &&
+ "Only the gnu format has a thin mode");
SmallString<128> TmpArchive;
int TmpArchiveFD;
if (auto EC = sys::fs::createUniqueFile(ArcName + ".temp-archive-%%%%%%%.a",
diff --git a/llvm/test/Object/archive-format.test b/llvm/test/Object/archive-format.test
index 651a9b9ef15..70458d51be1 100644
--- a/llvm/test/Object/archive-format.test
+++ b/llvm/test/Object/archive-format.test
@@ -62,3 +62,6 @@ THIN-PATH-NEXT: /0 0 0 0 644 4 `
THIN-PATH-NEXT: /20 0 0 0 644 4 `
THIN-PATH-NEXT: /41 0 0 0 644 4 `
THIN-PATH-NEXT: /65 0 0 0 644 4 `
+
+RUN: not llvm-ar --format=bsd rcT bad.a 0123456789abcde 0123456789abcdef 2>&1 | FileCheck --check-prefix=BSD-THIN %s
+BSD-THIN: Only the gnu format has a thin mode.
diff --git a/llvm/tools/llvm-ar/llvm-ar.cpp b/llvm/tools/llvm-ar/llvm-ar.cpp
index e0bd7d21dbc..ae70b2ce642 100644
--- a/llvm/tools/llvm-ar/llvm-ar.cpp
+++ b/llvm/tools/llvm-ar/llvm-ar.cpp
@@ -585,7 +585,7 @@ performWriteOperation(ArchiveOperation Operation, object::Archive *OldArchive,
switch (FormatOpt) {
case Default: {
Triple T(sys::getProcessTriple());
- if (T.isOSDarwin())
+ if (T.isOSDarwin() && !Thin)
Kind = object::Archive::K_BSD;
else
Kind = object::Archive::K_GNU;
@@ -595,6 +595,8 @@ performWriteOperation(ArchiveOperation Operation, object::Archive *OldArchive,
Kind = object::Archive::K_GNU;
break;
case BSD:
+ if (Thin)
+ fail("Only the gnu format has a thin mode");
Kind = object::Archive::K_BSD;
break;
}
OpenPOWER on IntegriCloud