[lld] r275521 - ELF: Make check() always return a value.

Rui Ueyama via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 14 19:01:04 PDT 2016


Author: ruiu
Date: Thu Jul 14 21:01:03 2016
New Revision: 275521

URL: http://llvm.org/viewvc/llvm-project?rev=275521&view=rev
Log:
ELF: Make check() always return a value.

This patch corresponds to r275511 for COFF.

Modified:
    lld/trunk/ELF/Driver.cpp
    lld/trunk/ELF/Error.h
    lld/trunk/ELF/InputFiles.cpp
    lld/trunk/ELF/LTO.cpp
    lld/trunk/ELF/Writer.cpp

Modified: lld/trunk/ELF/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Driver.cpp?rev=275521&r1=275520&r2=275521&view=diff
==============================================================================
--- lld/trunk/ELF/Driver.cpp (original)
+++ lld/trunk/ELF/Driver.cpp Thu Jul 14 21:01:03 2016
@@ -100,7 +100,8 @@ LinkerDriver::getArchiveMembers(MemoryBu
                   File->getFileName());
     V.push_back(MBRef);
   }
-  check(std::move(Err));
+  if (Err)
+    Error(Err);
 
   // Take ownership of memory buffers created for members of thin archives.
   for (std::unique_ptr<MemoryBuffer> &MB : File->takeThinBuffers())

Modified: lld/trunk/ELF/Error.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Error.h?rev=275521&r1=275520&r2=275521&view=diff
==============================================================================
--- lld/trunk/ELF/Error.h (original)
+++ lld/trunk/ELF/Error.h Thu Jul 14 21:01:03 2016
@@ -31,33 +31,28 @@ template <typename T> void error(const E
 LLVM_ATTRIBUTE_NORETURN void fatal(const Twine &Msg);
 LLVM_ATTRIBUTE_NORETURN void fatal(const Twine &Msg, const Twine &Prefix);
 
-void check(std::error_code EC);
-void check(Error Err);
-
-template <class T> T check(ErrorOr<T> EO) {
-  if (EO)
-    return std::move(*EO);
-  fatal(EO.getError().message());
+template <class T> T check(ErrorOr<T> E) {
+  if (auto EC = E.getError())
+    fatal(EC.message());
+  return std::move(*E);
 }
 
-template <class T> T check(Expected<T> EO) {
-  if (EO)
-    return std::move(*EO);
-  check(EO.takeError());
-  return T();
+template <class T> T check(Expected<T> E) {
+  if (!E)
+    fatal(errorToErrorCode(E.takeError()).message());
+  return std::move(*E);
 }
 
-template <class T> T check(ErrorOr<T> EO, const Twine &Prefix) {
-  if (EO)
-    return std::move(*EO);
-  fatal(EO.getError().message(), Prefix);
+template <class T> T check(ErrorOr<T> E, const Twine &Prefix) {
+  if (auto EC = E.getError())
+    fatal(EC.message(), Prefix);
+  return std::move(*E);
 }
 
-template <class T> T check(Expected<T> EO, const Twine &Prefix) {
-  if (EO)
-    return std::move(*EO);
-  error(errorToErrorCode(EO.takeError()), Prefix);
-  return T();
+template <class T> T check(Expected<T> E, const Twine &Prefix) {
+  if (!E)
+    fatal(errorToErrorCode(E.takeError()).message(), Prefix);
+  return std::move(*E);
 }
 
 } // namespace elf

Modified: lld/trunk/ELF/InputFiles.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputFiles.cpp?rev=275521&r1=275520&r2=275521&view=diff
==============================================================================
--- lld/trunk/ELF/InputFiles.cpp (original)
+++ lld/trunk/ELF/InputFiles.cpp Thu Jul 14 21:01:03 2016
@@ -41,7 +41,8 @@ template <class ELFT>
 static ELFFile<ELFT> createELFObj(MemoryBufferRef MB) {
   std::error_code EC;
   ELFFile<ELFT> F(MB.getBuffer(), EC);
-  check(EC);
+  if (EC)
+    error(EC, "failed to read " + MB.getBufferIdentifier());
   return F;
 }
 

Modified: lld/trunk/ELF/LTO.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LTO.cpp?rev=275521&r1=275520&r2=275521&view=diff
==============================================================================
--- lld/trunk/ELF/LTO.cpp (original)
+++ lld/trunk/ELF/LTO.cpp Thu Jul 14 21:01:03 2016
@@ -44,22 +44,24 @@ using namespace lld::elf;
 
 // This is for use when debugging LTO.
 static void saveLtoObjectFile(StringRef Buffer, unsigned I, bool Many) {
-  SmallString<128> Filename = Config->OutputFile;
+  SmallString<128> Path = Config->OutputFile;
   if (Many)
-    Filename += utostr(I);
-  Filename += ".lto.o";
+    Path += utostr(I);
+  Path += ".lto.o";
   std::error_code EC;
-  raw_fd_ostream OS(Filename, EC, sys::fs::OpenFlags::F_None);
-  check(EC);
+  raw_fd_ostream OS(Path, EC, sys::fs::OpenFlags::F_None);
+  if (EC)
+    error(EC, "cannot create " + Path);
   OS << Buffer;
 }
 
 // This is for use when debugging LTO.
 static void saveBCFile(Module &M, StringRef Suffix) {
+  std::string Path = (Config->OutputFile + Suffix).str();
   std::error_code EC;
-  raw_fd_ostream OS(Config->OutputFile.str() + Suffix.str(), EC,
-                    sys::fs::OpenFlags::F_None);
-  check(EC);
+  raw_fd_ostream OS(Path, EC, sys::fs::OpenFlags::F_None);
+  if (EC)
+    error(EC, "cannot create " + Path);
   WriteBitcodeToFile(&M, OS, /* ShouldPreserveUseListOrder */ true);
 }
 

Modified: lld/trunk/ELF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=275521&r1=275520&r2=275521&view=diff
==============================================================================
--- lld/trunk/ELF/Writer.cpp (original)
+++ lld/trunk/ELF/Writer.cpp Thu Jul 14 21:01:03 2016
@@ -261,7 +261,8 @@ template <class ELFT> void Writer<ELFT>:
   writeBuildId();
   if (HasError)
     return;
-  check(Buffer->commit());
+  if (auto EC = Buffer->commit())
+    error(EC, "failed to write to the output file");
 }
 
 template <class ELFT>




More information about the llvm-commits mailing list