[PATCH] D138218: [llvm-ar] Fix when llvm-ar fails to replace existing members when updating a thin archive
Owen Reynolds via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Nov 18 06:43:42 PST 2022
This revision was automatically updated to reflect the committed changes.
Closed by commit rGdcbf61b3520e: [llvm-ar] Fix when llvm-ar fails to replace existing members when updating a… (authored by gbreynoo).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D138218/new/
https://reviews.llvm.org/D138218
Files:
llvm/test/tools/llvm-ar/thin-archive-relative-path.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
@@ -875,8 +875,16 @@
if (Operation == QuickAppend || Members.empty())
return IA_AddOldMember;
- auto MI = find_if(
- Members, [Name](StringRef Path) { return comparePaths(Name, Path); });
+
+ auto MI = find_if(Members, [Name](StringRef Path) {
+ if (Thin && !sys::path::is_absolute(Path)) {
+ Expected<std::string> PathOrErr =
+ computeArchiveRelativePath(ArchiveName, Path);
+ return comparePaths(Name, PathOrErr ? *PathOrErr : Path);
+ } else {
+ return comparePaths(Name, Path);
+ }
+ });
if (MI == Members.end())
return IA_AddOldMember;
Index: llvm/test/tools/llvm-ar/thin-archive-relative-path.test
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-ar/thin-archive-relative-path.test
@@ -0,0 +1,19 @@
+RUN: rm -rf %t && mkdir -p %t/foo %t/bar
+
+RUN: yaml2obj %S/Inputs/elf.yaml -o %t/foo/elf.o
+RUN: cp %t/foo/elf.o %t/bar/elf.o
+RUN: cd %t
+
+Test a case in which CWD does not contain the archive, ensure replacement behaves as expected
+
+RUN: llvm-ar cr --thin foo/lib.a foo/elf.o
+RUN: llvm-ar t foo/lib.a | FileCheck %s --check-prefix=FOO --implicit-check-not {{.}}
+
+RUN: llvm-ar cr --thin foo/lib.a bar/elf.o
+RUN: llvm-ar t foo/lib.a | FileCheck %s --check-prefixes=FOO,BAR --implicit-check-not {{.}}
+
+RUN: llvm-ar cr --thin foo/lib.a foo/elf.o
+RUN: llvm-ar t foo/lib.a | FileCheck %s --check-prefixes=FOO,BAR --implicit-check-not {{.}}
+
+FOO: foo/elf.o
+BAR: foo/../bar/elf.o
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D138218.476456.patch
Type: text/x-patch
Size: 1694 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20221118/3887fef0/attachment.bin>
More information about the llvm-commits
mailing list