diff options
author | Jacek Caban <jacek@codeweavers.com> | 2023-02-10 00:46:20 +0200 |
---|---|---|
committer | Martin Storsjö <martin@martin.st> | 2023-02-10 00:51:07 +0200 |
commit | 350c89fa75a089060baea83a7ed88ed360f6e918 (patch) | |
tree | cb082a68526e6fd206038deaa8b15dda7fdba422 /llvm/lib/ToolDrivers/llvm-lib/LibDriver.cpp | |
parent | 3d570a5c5f6630c8c34c2323e7d04eb1c63c7a32 (diff) | |
download | llvm-350c89fa75a089060baea83a7ed88ed360f6e918.zip llvm-350c89fa75a089060baea83a7ed88ed360f6e918.tar.gz llvm-350c89fa75a089060baea83a7ed88ed360f6e918.tar.bz2 |
[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
Diffstat (limited to 'llvm/lib/ToolDrivers/llvm-lib/LibDriver.cpp')
-rw-r--r-- | llvm/lib/ToolDrivers/llvm-lib/LibDriver.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
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<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()); } @@ -392,6 +394,9 @@ int llvm::libDriverMain(ArrayRef<const char *> 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, |