[llvm] r313937 - Convert the archive writer to use Error.
Rafael Espindola via llvm-commits
llvm-commits at lists.llvm.org
Thu Sep 21 16:13:37 PDT 2017
Author: rafael
Date: Thu Sep 21 16:13:36 2017
New Revision: 313937
URL: http://llvm.org/viewvc/llvm-project?rev=313937&view=rev
Log:
Convert the archive writer to use Error.
This found one place in lld that was not checking the error.
Modified:
llvm/trunk/include/llvm/Object/ArchiveWriter.h
llvm/trunk/include/llvm/Object/COFFImportFile.h
llvm/trunk/lib/Object/ArchiveWriter.cpp
llvm/trunk/lib/Object/COFFImportFile.cpp
llvm/trunk/lib/ToolDrivers/llvm-lib/LibDriver.cpp
llvm/trunk/tools/llvm-ar/llvm-ar.cpp
Modified: llvm/trunk/include/llvm/Object/ArchiveWriter.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ArchiveWriter.h?rev=313937&r1=313936&r2=313937&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Object/ArchiveWriter.h (original)
+++ llvm/trunk/include/llvm/Object/ArchiveWriter.h Thu Sep 21 16:13:36 2017
@@ -16,6 +16,7 @@
#include "llvm/ADT/StringRef.h"
#include "llvm/Object/Archive.h"
+#include "llvm/Support/Error.h"
#include "llvm/Support/FileSystem.h"
namespace llvm {
@@ -37,10 +38,10 @@ struct NewArchiveMember {
bool Deterministic);
};
-std::error_code
-writeArchive(StringRef ArcName, ArrayRef<NewArchiveMember> NewMembers,
- bool WriteSymtab, object::Archive::Kind Kind, bool Deterministic,
- bool Thin, std::unique_ptr<MemoryBuffer> OldArchiveBuf = nullptr);
+Error writeArchive(StringRef ArcName, ArrayRef<NewArchiveMember> NewMembers,
+ bool WriteSymtab, object::Archive::Kind Kind,
+ bool Deterministic, bool Thin,
+ std::unique_ptr<MemoryBuffer> OldArchiveBuf = nullptr);
}
#endif
Modified: llvm/trunk/include/llvm/Object/COFFImportFile.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/COFFImportFile.h?rev=313937&r1=313936&r2=313937&view=diff
==============================================================================
--- llvm/trunk/include/llvm/Object/COFFImportFile.h (original)
+++ llvm/trunk/include/llvm/Object/COFFImportFile.h Thu Sep 21 16:13:36 2017
@@ -96,11 +96,9 @@ struct COFFShortExport {
}
};
-std::error_code writeImportLibrary(StringRef ImportName,
- StringRef Path,
- ArrayRef<COFFShortExport> Exports,
- COFF::MachineTypes Machine,
- bool MakeWeakAliases);
+Error writeImportLibrary(StringRef ImportName, StringRef Path,
+ ArrayRef<COFFShortExport> Exports,
+ COFF::MachineTypes Machine, bool MakeWeakAliases);
} // namespace object
} // namespace llvm
Modified: llvm/trunk/lib/Object/ArchiveWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/ArchiveWriter.cpp?rev=313937&r1=313936&r2=313937&view=diff
==============================================================================
--- llvm/trunk/lib/Object/ArchiveWriter.cpp (original)
+++ llvm/trunk/lib/Object/ArchiveWriter.cpp Thu Sep 21 16:13:36 2017
@@ -278,7 +278,7 @@ static sys::TimePoint<std::chrono::secon
}
// Returns the offset of the first reference to a member offset.
-static ErrorOr<unsigned>
+static Expected<unsigned>
writeSymbolTable(raw_fd_ostream &Out, object::Archive::Kind Kind,
ArrayRef<NewArchiveMember> Members,
std::vector<unsigned> &MemberOffsetRefs, bool Deterministic) {
@@ -320,8 +320,8 @@ writeSymbolTable(raw_fd_ostream &Out, ob
continue;
unsigned NameOffset = NameOS.tell();
- if (auto EC = S.printName(NameOS))
- return EC;
+ if (std::error_code EC = S.printName(NameOS))
+ return errorCodeToError(EC);
NameOS << '\0';
MemberOffsetRefs.push_back(MemberNum);
if (isBSDLike(Kind))
@@ -373,17 +373,17 @@ writeSymbolTable(raw_fd_ostream &Out, ob
return BodyStartOffset + 4;
}
-std::error_code
-llvm::writeArchive(StringRef ArcName, ArrayRef<NewArchiveMember> NewMembers,
- bool WriteSymtab, object::Archive::Kind Kind,
- bool Deterministic, bool Thin,
- std::unique_ptr<MemoryBuffer> OldArchiveBuf) {
+Error llvm::writeArchive(StringRef ArcName,
+ ArrayRef<NewArchiveMember> NewMembers,
+ bool WriteSymtab, object::Archive::Kind Kind,
+ bool Deterministic, bool Thin,
+ std::unique_ptr<MemoryBuffer> OldArchiveBuf) {
assert((!Thin || !isBSDLike(Kind)) && "Only the gnu format has a thin mode");
SmallString<128> TmpArchive;
int TmpArchiveFD;
if (auto EC = sys::fs::createUniqueFile(ArcName + ".temp-archive-%%%%%%%.a",
TmpArchiveFD, TmpArchive))
- return EC;
+ return errorCodeToError(EC);
tool_output_file Output(TmpArchive, TmpArchiveFD);
raw_fd_ostream &Out = Output.os();
@@ -396,10 +396,10 @@ llvm::writeArchive(StringRef ArcName, Ar
unsigned MemberReferenceOffset = 0;
if (WriteSymtab) {
- ErrorOr<unsigned> MemberReferenceOffsetOrErr = writeSymbolTable(
+ Expected<unsigned> MemberReferenceOffsetOrErr = writeSymbolTable(
Out, Kind, NewMembers, MemberOffsetRefs, Deterministic);
- if (auto EC = MemberReferenceOffsetOrErr.getError())
- return EC;
+ if (auto E = MemberReferenceOffsetOrErr.takeError())
+ return E;
MemberReferenceOffset = MemberReferenceOffsetOrErr.get();
}
@@ -461,5 +461,5 @@ llvm::writeArchive(StringRef ArcName, Ar
OldArchiveBuf.reset();
sys::fs::rename(TmpArchive, ArcName);
- return std::error_code();
+ return Error::success();
}
Modified: llvm/trunk/lib/Object/COFFImportFile.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/COFFImportFile.cpp?rev=313937&r1=313936&r2=313937&view=diff
==============================================================================
--- llvm/trunk/lib/Object/COFFImportFile.cpp (original)
+++ llvm/trunk/lib/Object/COFFImportFile.cpp Thu Sep 21 16:13:36 2017
@@ -558,9 +558,9 @@ NewArchiveMember ObjectFactory::createWe
return {MemoryBufferRef(StringRef(Buf, Buffer.size()), ImportName)};
}
-std::error_code writeImportLibrary(StringRef ImportName, StringRef Path,
- ArrayRef<COFFShortExport> Exports,
- MachineTypes Machine, bool MakeWeakAliases) {
+Error writeImportLibrary(StringRef ImportName, StringRef Path,
+ ArrayRef<COFFShortExport> Exports,
+ MachineTypes Machine, bool MakeWeakAliases) {
std::vector<NewArchiveMember> Members;
ObjectFactory OF(llvm::sys::path::filename(ImportName), Machine);
@@ -596,9 +596,8 @@ std::error_code writeImportLibrary(Strin
? SymbolName
: replace(SymbolName, E.Name, E.ExtName);
- if (!Name) {
- return errorToErrorCode(Name.takeError());
- }
+ if (!Name)
+ return Name.takeError();
Members.push_back(
OF.createShortImport(*Name, E.Ordinal, ImportType, NameType));
Modified: llvm/trunk/lib/ToolDrivers/llvm-lib/LibDriver.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/ToolDrivers/llvm-lib/LibDriver.cpp?rev=313937&r1=313936&r2=313937&view=diff
==============================================================================
--- llvm/trunk/lib/ToolDrivers/llvm-lib/LibDriver.cpp (original)
+++ llvm/trunk/lib/ToolDrivers/llvm-lib/LibDriver.cpp Thu Sep 21 16:13:36 2017
@@ -157,13 +157,13 @@ int llvm::libDriverMain(ArrayRef<const c
// Create an archive file.
std::string OutputPath = getOutputPath(&Args, Members[0]);
- std::error_code EC =
- writeArchive(OutputPath, Members,
- /*WriteSymtab=*/true, object::Archive::K_GNU,
- /*Deterministic*/ true, Args.hasArg(OPT_llvmlibthin));
-
- if (EC) {
- llvm::errs() << OutputPath << ": " << EC.message() << "\n";
+ if (Error E =
+ writeArchive(OutputPath, Members,
+ /*WriteSymtab=*/true, object::Archive::K_GNU,
+ /*Deterministic*/ true, Args.hasArg(OPT_llvmlibthin))) {
+ handleAllErrors(std::move(E), [&](const ErrorInfoBase &EI) {
+ llvm::errs() << OutputPath << ": " << EI.message() << "\n";
+ });
return 1;
}
Modified: llvm/trunk/tools/llvm-ar/llvm-ar.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-ar/llvm-ar.cpp?rev=313937&r1=313936&r2=313937&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-ar/llvm-ar.cpp (original)
+++ llvm/trunk/tools/llvm-ar/llvm-ar.cpp Thu Sep 21 16:13:36 2017
@@ -681,10 +681,10 @@ performWriteOperation(ArchiveOperation O
break;
}
- std::error_code EC =
+ Error E =
writeArchive(ArchiveName, NewMembersP ? *NewMembersP : NewMembers, Symtab,
Kind, Deterministic, Thin, std::move(OldArchiveBuf));
- failIfError(EC, ArchiveName);
+ failIfError(std::move(E), ArchiveName);
}
static void createSymbolTable(object::Archive *OldArchive) {
More information about the llvm-commits
mailing list