forked from OSchip/llvm-project
[llvm-ar] Prevent automatic conversion from thin to full archive
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 change stops this from occuring. If a user is trying to convert between thin and full archives then they can explicitly use the 'L' command to createa new archive. Differential Revision: https://reviews.llvm.org/D118693
This commit is contained in:
parent
309b48ca5e
commit
d17c54d17d
|
@ -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 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>
|
||||
|
|
|
@ -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 with 'L'
|
||||
# RUN: llvm-ar -qcL %tfull.a %tthin.a
|
||||
# RUN: FileCheck --check-prefixes=FULL --input-file=%tfull.a %s
|
||||
|
||||
FULL: !<arch>
|
|
@ -654,6 +654,11 @@ static void addChildMember(std::vector<NewArchiveMember> &Members,
|
|||
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());
|
||||
|
|
Loading…
Reference in New Issue