From 350c89fa75a089060baea83a7ed88ed360f6e918 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Fri, 10 Feb 2023 00:46:20 +0200 Subject: [llvm-lib] Write object files in reversed order. This isn't strictly needed, but this matches how MSVC lib.exe writes to archives, so this makes llvm-lib more compatible and simplifies comparing output between tools. Reviewed By: hans Differential Revision: https://reviews.llvm.org/D143536 --- llvm/lib/ToolDrivers/llvm-lib/LibDriver.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'llvm/lib/ToolDrivers/llvm-lib/LibDriver.cpp') diff --git a/llvm/lib/ToolDrivers/llvm-lib/LibDriver.cpp b/llvm/lib/ToolDrivers/llvm-lib/LibDriver.cpp index ade753a..f92ff3d 100644 --- a/llvm/lib/ToolDrivers/llvm-lib/LibDriver.cpp +++ b/llvm/lib/ToolDrivers/llvm-lib/LibDriver.cpp @@ -133,12 +133,14 @@ static void doList(opt::InputArgList& Args) { object::Archive Archive(B.get()->getMemBufferRef(), Err); fatalOpenError(std::move(Err), B->getBufferIdentifier()); + std::vector Names; for (auto &C : Archive.children(Err)) { Expected 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()); } @@ -392,6 +394,9 @@ int llvm::libDriverMain(ArrayRef ArgsArr) { } } + // 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, -- cgit v1.1