# RUN: not llvm-ar rT %t/archive.a %s 2>&1 | FileCheck %s
# CHECK: error: cannot convert a regular archive to a thin one
+
+## Test that you can add a full archive's contents to a thin archive with 'L'
+# RUN: llvm-ar -TqcL %t/thin.a %t/archive.a
+# RUN: FileCheck --check-prefixes=THIN --input-file=%t/thin.a %s
+
+THIN: !<thin>
--- /dev/null
+## Test thin archives do not siletly convert to full archives on write.
+
+# RUN: rm -f %tthin.a %tfull.a
+
+# RUN: llvm-ar -Trc %tthin.a %S/Inputs/a.txt
+# RUN: FileCheck --check-prefixes=THIN --input-file=%tthin.a %s
+
+# RUN: llvm-ar -q %tthin.a %S/Inputs/b.txt
+# RUN: FileCheck --check-prefixes=THIN --input-file=%tthin.a %s
+
+# RUN: llvm-ar -r %tthin.a %S/Inputs/c.txt
+# RUN: FileCheck --check-prefixes=THIN --input-file=%tthin.a %s
+
+# RUN: llvm-ar -am %S/Inputs/a.txt %tthin.a %S/Inputs/c.txt
+# RUN: FileCheck --check-prefixes=THIN --input-file=%tthin.a %s
+
+# RUN: llvm-ar -d %tthin.a %S/Inputs/c.txt
+# RUN: FileCheck --check-prefixes=THIN --input-file=%tthin.a %s
+
+THIN: !<thin>
+
+## Test that you can add a thin archive's contents to a full archive with 'L'
+# RUN: llvm-ar -qcL %tfull.a %tthin.a
+# RUN: FileCheck --check-prefixes=FULL --input-file=%tfull.a %s
+
+FULL: !<arch>
bool FlattenArchive = false) {
if (Thin && !M.getParent()->isThin())
fail("cannot convert a regular archive to a thin one");
+
+ // Avoid converting an existing thin archive to a regular one.
+ if (!AddLibrary && M.getParent()->isThin())
+ Thin = true;
+
Expected<NewArchiveMember> NMOrErr =
NewArchiveMember::getOldMember(M, Deterministic);
failIfError(NMOrErr.takeError());