]> granicus.if.org Git - llvm/commitdiff
Convert the archive writer to use Error.
authorRafael Espindola <rafael.espindola@gmail.com>
Thu, 21 Sep 2017 23:13:36 +0000 (23:13 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Thu, 21 Sep 2017 23:13:36 +0000 (23:13 +0000)
This found one place in lld that was not checking the error.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@313937 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Object/ArchiveWriter.h
include/llvm/Object/COFFImportFile.h
lib/Object/ArchiveWriter.cpp
lib/Object/COFFImportFile.cpp
lib/ToolDrivers/llvm-lib/LibDriver.cpp
tools/llvm-ar/llvm-ar.cpp

index 5fc1e1b1236d60ee982df769c6ae3e9efd226231..495b943d04c0058e0050d54ac53fb43ca045e5a5 100644 (file)
@@ -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
index cf9c80a06f49a9ad35a42188f983bc820542c806..4b284de679b3d2316e578093bee09db545613ac2 100644 (file)
@@ -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
index 293dbe6888c47f7c6dc1bca2d84c7ce6f3c58422..015c24836fa9cb7f22ac4a7b0264ac65e7b33c7d 100644 (file)
@@ -278,7 +278,7 @@ static sys::TimePoint<std::chrono::seconds> now(bool Deterministic) {
 }
 
 // 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, object::Archive::Kind Kind,
         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, object::Archive::Kind Kind,
   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, ArrayRef<NewArchiveMember> NewMembers,
 
   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, ArrayRef<NewArchiveMember> NewMembers,
   OldArchiveBuf.reset();
 
   sys::fs::rename(TmpArchive, ArcName);
-  return std::error_code();
+  return Error::success();
 }
index 5f4b8908837cfa19407efb44da6f7232b60ec769..acac1e6d56a2ef8cf29a40699198567a1bf2876d 100644 (file)
@@ -558,9 +558,9 @@ NewArchiveMember ObjectFactory::createWeakExternal(StringRef Sym,
   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(StringRef ImportName, StringRef Path,
                                      ? 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));
index a7268d048e3b219b6a65c2fced3a41fb1c8279db..f5cf848aa8c744414cbd9b675b2a1eb48de2089f 100644 (file)
@@ -157,13 +157,13 @@ int llvm::libDriverMain(ArrayRef<const char *> ArgsArr) {
 
   // 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;
   }
 
index 03655cb4318353822ef78559462e6cf669e5a7ae..576265cfe598f743f503b9892096d0d1a06a4048 100644 (file)
@@ -681,10 +681,10 @@ performWriteOperation(ArchiveOperation Operation,
     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) {