object::Archive Archive(B.get()->getMemBufferRef(), Err);
fatalOpenError(std::move(Err), B->getBufferIdentifier());
+ std::vector<StringRef> Names;
for (auto &C : Archive.children(Err)) {
Expected<StringRef> NameOrErr = C.getName();
fatalOpenError(NameOrErr.takeError(), B->getBufferIdentifier());
- StringRef Name = NameOrErr.get();
- llvm::outs() << Name << '\n';
+ Names.push_back(NameOrErr.get());
}
+ for (auto Name : reverse(Names))
+ llvm::outs() << Name << '\n';
fatalOpenError(std::move(Err), B->getBufferIdentifier());
}
}
}
+ // For compatibility with MSVC, reverse member vector after de-duplication.
+ std::reverse(Members.begin(), Members.end());
+
if (Error E =
writeArchive(OutputPath, Members,
/*WriteSymtab=*/true, object::Archive::K_GNU,
--- /dev/null
+.globl c
+c:
+.globl a
+a:
+.globl b
+b:
RUN: llvm-mc -triple=x86_64-pc-windows-msvc -filetype=obj -o %t/foo.o %S/Inputs/a.s
RUN: llvm-mc -triple=x86_64-pc-windows-msvc -filetype=obj -o %t/bar.o %S/Inputs/b.s
-RUN: llvm-lib -out:%t/foo.lib %t/foo.o %t/foo.o %t/bar.o
+RUN: llvm-mc -triple=x86_64-pc-windows-msvc -filetype=obj -o %t/abc.o %S/Inputs/abc.s
+RUN: llvm-lib -out:%t/foo.lib %t/foo.o %t/foo.o %t/abc.o %t/bar.o %t/foo.o %t/foo.o
RUN: llvm-ar t %t/foo.lib | FileCheck %s
-CHECK: foo.o
-CHECK-NOT: foo.o
CHECK: bar.o
+CHECK-NEXT: abc.o
+CHECK-NEXT: foo.o
+CHECK-NOT: foo.o
RUN: llvm-mc -triple=x86_64-pc-windows-msvc -filetype=obj -o %t/bar.o %S/Inputs/b.s
RUN: llvm-lib -out:%t/bar.lib %t/foo.lib %t/bar.o
-RUN: llvm-ar t %t/bar.lib | FileCheck %s
+RUN: llvm-lib -list %t/bar.lib | FileCheck %s
CHECK: foo.o
CHECK: bar.o
RUN: llvm-ar t foo.lib | FileCheck %s
FIXME: We should probably use backslashes on Windows to better match MSVC tools.
-CHECK: foo/a.obj
CHECK: foo/b.obj
+CHECK: foo/a.obj
Do it again with absolute paths and see that we get something.
RUN: llvm-lib -out:foo.lib %t/foo/a.obj %t/foo/b.obj
RUN: llvm-ar t foo.lib | FileCheck %s --check-prefix=ABS
-ABS: {{.*}}/foo/a.obj
ABS: {{.*}}/foo/b.obj
+ABS: {{.*}}/foo/a.obj
# RUN: rm -rf %t && mkdir -p %t && cd %t
# RUN: llvm-mc -triple=x86_64-pc-windows-msvc -filetype=obj -o a.obj %S/Inputs/a.s
# RUN: llvm-mc -triple=x86_64-pc-windows-msvc -filetype=obj -o b.obj %S/Inputs/b.s
-# RUN: llvm-lib /out:xfghashmap.lib a.obj b.obj
+# RUN: llvm-lib /out:xfghashmap.lib b.obj a.obj
## Replace a section in the library file with /<XFGHASHMAP>/ emulating
## a library from the Windows SDK for Windows 11.
## This should print the /<XFGHASHMAP>/ section as well as an .obj one.
# RUN: llvm-lib /list %t/xfghashmap.lib | FileCheck %s
-# CHECK: a.obj
# CHECK: /<XFGHASHMAP>/
# CHECK-NOT: b.obj
+# CHECK: a.obj
import sys