[PATCH] D118693: [llvm-ar] Prevent automatic conversion from thin to full archive
Owen Reynolds via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Feb 1 03:56:44 PST 2022
gbreynoo created this revision.
gbreynoo added reviewers: jhenderson, MaskRay.
Herald added a subscriber: rupprecht.
gbreynoo requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.
llvm-ar silently converts a thin archive to a regular archive when you specify a modification operation (e.g. 'r') without the 'T' modifier. This is probably not what is normally intended, since it would be very easy to forget the modifier. If a user is trying to convert between thin and full archives then they can explicitly use the 'L' command to create a new archive.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D118693
Files:
llvm/test/tools/llvm-ar/full-to-thin-archive.test
llvm/test/tools/llvm-ar/thin-to-full-archive.test
llvm/tools/llvm-ar/llvm-ar.cpp
Index: llvm/tools/llvm-ar/llvm-ar.cpp
===================================================================
--- llvm/tools/llvm-ar/llvm-ar.cpp
+++ llvm/tools/llvm-ar/llvm-ar.cpp
@@ -651,6 +651,11 @@
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());
Index: llvm/test/tools/llvm-ar/thin-to-full-archive.test
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-ar/thin-to-full-archive.test
@@ -0,0 +1,26 @@
+## 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
+# RUN: llvm-ar -qcL %tfull.a %tthin.a
+# RUN: FileCheck -input-file=%tfull.a %s
+
+CHECK-NOT: !<thin>
Index: llvm/test/tools/llvm-ar/full-to-thin-archive.test
===================================================================
--- llvm/test/tools/llvm-ar/full-to-thin-archive.test
+++ llvm/test/tools/llvm-ar/full-to-thin-archive.test
@@ -6,3 +6,9 @@
# 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
+# RUN: llvm-ar -TqcL %t/thin.a %t/archive.a
+# RUN: FileCheck --check-prefixes=THIN -input-file=%t/thin.a %s
+
+THIN: !<thin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D118693.404878.patch
Type: text/x-patch
Size: 2278 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220201/6d248add/attachment.bin>
More information about the llvm-commits
mailing list