1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-25 12:12:47 +01:00

[llvm-ar] Resubmit recursive thin archive test with fix for full path names and better error messages

llvm-svn: 351256
This commit is contained in:
Jordan Rupprecht 2019-01-15 21:52:31 +00:00
parent 087cc9fbff
commit 6a91773c9e
2 changed files with 20 additions and 5 deletions

View File

@ -0,0 +1,13 @@
# Since llvm-ar cannot create thin archives that contain any thin archives,
# nested-thin-archive.a is a manually constructed thin archive that contains
# another (unflattened) thin archive.
# This test ensures that flat archives are recursively flattened.
RUN: rm -f %t.a
RUN: llvm-ar rcsT %t.a %S/Inputs/nested-thin-archive.a %S/Inputs/d.txt
RUN: llvm-ar t %t.a | FileCheck %s
CHECK: a.txt
CHECK-NEXT: b.txt
CHECK-NEXT: c.txt
CHECK-NEXT: d.txt

View File

@ -33,6 +33,7 @@
#include "llvm/Support/StringSaver.h"
#include "llvm/Support/TargetSelect.h"
#include "llvm/Support/ToolOutputFile.h"
#include "llvm/Support/WithColor.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/ToolDrivers/llvm-dlltool/DlltoolDriver.h"
#include "llvm/ToolDrivers/llvm-lib/LibDriver.h"
@ -115,7 +116,7 @@ void printHelpMessage() {
// Show the error message and exit.
LLVM_ATTRIBUTE_NORETURN static void fail(Twine Error) {
errs() << ToolName << ": " << Error << ".\n";
WithColor::error(errs(), ToolName) << Error << ".\n";
printHelpMessage();
exit(1);
}
@ -221,7 +222,7 @@ std::vector<std::unique_ptr<object::Archive>> Archives;
static object::Archive &readLibrary(const Twine &Library) {
auto BufOrErr = MemoryBuffer::getFile(Library, -1, false);
failIfError(BufOrErr.getError(), "Could not open library");
failIfError(BufOrErr.getError(), "Could not open library " + Library);
ArchiveBuffers.push_back(std::move(*BufOrErr));
auto LibOrErr =
object::Archive::create(ArchiveBuffers.back()->getMemBufferRef());
@ -532,7 +533,7 @@ static void performReadOperation(ArchiveOperation Operation,
if (Members.empty())
return;
for (StringRef Name : Members)
errs() << Name << " was not found\n";
WithColor::error(errs(), ToolName) << "'" << Name << "' was not found\n";
exit(1);
}
@ -546,7 +547,7 @@ static void addChildMember(std::vector<NewArchiveMember> &Members,
failIfError(NMOrErr.takeError());
if (FlattenArchive &&
identify_magic(NMOrErr->Buf->getBuffer()) == file_magic::archive) {
Expected<StringRef> FileNameOrErr = M.getName();
Expected<std::string> FileNameOrErr = M.getFullName();
failIfError(FileNameOrErr.takeError());
object::Archive &Lib = readLibrary(*FileNameOrErr);
// When creating thin archives, only flatten if the member is also thin.
@ -853,7 +854,8 @@ static int performOperation(ArchiveOperation Operation,
} else {
if (!Create) {
// Produce a warning if we should and we're creating the archive
errs() << ToolName << ": creating " << ArchiveName << "\n";
WithColor::warning(errs(), ToolName)
<< "creating " << ArchiveName << "\n";
}
}