[lld] r264924 - Convert file handle* methods to llvm::Error instead of std::error_code. NFC.

Pete Cooper via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 30 13:56:54 PDT 2016


Author: pete
Date: Wed Mar 30 15:56:54 2016
New Revision: 264924

URL: http://llvm.org/viewvc/llvm-project?rev=264924&view=rev
Log:
Convert file handle* methods to llvm::Error instead of std::error_code.  NFC.

This updates most of the file handling methods in the linking context and
resolver to use the new API.

Modified:
    lld/trunk/include/lld/Core/LinkingContext.h
    lld/trunk/include/lld/Core/Resolver.h
    lld/trunk/include/lld/ReaderWriter/MachOLinkingContext.h
    lld/trunk/lib/Core/Resolver.cpp
    lld/trunk/lib/ReaderWriter/MachO/MachOLinkingContext.cpp

Modified: lld/trunk/include/lld/Core/LinkingContext.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/LinkingContext.h?rev=264924&r1=264923&r2=264924&view=diff
==============================================================================
--- lld/trunk/include/lld/Core/LinkingContext.h (original)
+++ lld/trunk/include/lld/Core/LinkingContext.h Wed Mar 30 15:56:54 2016
@@ -208,7 +208,7 @@ public:
   /// errors for any differences between the context state and a loaded file.
   /// For example, we can error if we try to load a file which is a different
   /// arch from that being linked.
-  virtual std::error_code handleLoadedFile(File &file) = 0;
+  virtual llvm::Error handleLoadedFile(File &file) = 0;
 
   /// @}
 protected:

Modified: lld/trunk/include/lld/Core/Resolver.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/Core/Resolver.h?rev=264924&r1=264923&r2=264924&view=diff
==============================================================================
--- lld/trunk/include/lld/Core/Resolver.h (original)
+++ lld/trunk/include/lld/Core/Resolver.h Wed Mar 30 15:56:54 2016
@@ -42,13 +42,13 @@ public:
 
   // Handle files, this adds atoms from the current file thats
   // being processed by the resolver
-  ErrorOr<bool> handleFile(File &);
+  llvm::Expected<bool> handleFile(File &);
 
   // Handle an archive library file.
-  ErrorOr<bool> handleArchiveFile(File &);
+  llvm::Expected<bool> handleArchiveFile(File &);
 
   // Handle a shared library file.
-  std::error_code handleSharedLibrary(File &);
+  llvm::Error handleSharedLibrary(File &);
 
   /// @brief do work of merging and resolving and return list
   bool resolve();
@@ -56,7 +56,7 @@ public:
   std::unique_ptr<SimpleFile> resultFile() { return std::move(_result); }
 
 private:
-  typedef std::function<ErrorOr<bool>(StringRef)> UndefCallback;
+  typedef std::function<llvm::Expected<bool>(StringRef)> UndefCallback;
 
   bool undefinesAdded(int begin, int end);
   File *getFile(int &index);
@@ -67,7 +67,7 @@ private:
   void deadStripOptimize();
   bool checkUndefines();
   void removeCoalescedAwayAtoms();
-  ErrorOr<bool> forEachUndefines(File &file, UndefCallback callback);
+  llvm::Expected<bool> forEachUndefines(File &file, UndefCallback callback);
 
   void markLive(const Atom *atom);
 

Modified: lld/trunk/include/lld/ReaderWriter/MachOLinkingContext.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/MachOLinkingContext.h?rev=264924&r1=264923&r2=264924&view=diff
==============================================================================
--- lld/trunk/include/lld/ReaderWriter/MachOLinkingContext.h (original)
+++ lld/trunk/include/lld/ReaderWriter/MachOLinkingContext.h Wed Mar 30 15:56:54 2016
@@ -407,7 +407,7 @@ public:
 
   void finalizeInputFiles() override;
 
-  std::error_code handleLoadedFile(File &file) override;
+  llvm::Error handleLoadedFile(File &file) override;
 
   bool customAtomOrderer(const DefinedAtom *left, const DefinedAtom *right,
                          bool &leftBeforeRight) const;

Modified: lld/trunk/lib/Core/Resolver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Core/Resolver.cpp?rev=264924&r1=264923&r2=264924&view=diff
==============================================================================
--- lld/trunk/lib/Core/Resolver.cpp (original)
+++ lld/trunk/lib/Core/Resolver.cpp Wed Mar 30 15:56:54 2016
@@ -19,6 +19,7 @@
 #include "lld/Core/UndefinedAtom.h"
 #include "llvm/ADT/iterator_range.h"
 #include "llvm/Support/Debug.h"
+#include "llvm/Support/Error.h"
 #include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/Format.h"
 #include "llvm/Support/raw_ostream.h"
@@ -29,9 +30,9 @@
 
 namespace lld {
 
-ErrorOr<bool> Resolver::handleFile(File &file) {
+llvm::Expected<bool> Resolver::handleFile(File &file) {
   if (auto ec = _ctx.handleLoadedFile(file))
-    return ec;
+    return std::move(ec);
   bool undefAdded = false;
   for (auto &atom : file.defined().owning_ptrs())
     doDefinedAtom(std::move(atom));
@@ -46,7 +47,8 @@ ErrorOr<bool> Resolver::handleFile(File
   return undefAdded;
 }
 
-ErrorOr<bool> Resolver::forEachUndefines(File &file, UndefCallback callback) {
+llvm::Expected<bool> Resolver::forEachUndefines(File &file,
+                                                UndefCallback callback) {
   size_t i = _undefineIndex[&file];
   bool undefAdded = false;
   do {
@@ -61,8 +63,8 @@ ErrorOr<bool> Resolver::forEachUndefines
         continue;
       }
       auto undefAddedOrError = callback(undefName);
-      if (undefAddedOrError.getError())
-        return undefAddedOrError;
+      if (auto ec = undefAddedOrError.takeError())
+        return std::move(ec);
       undefAdded |= undefAddedOrError.get();
     }
   } while (i < _undefines.size());
@@ -70,9 +72,10 @@ ErrorOr<bool> Resolver::forEachUndefines
   return undefAdded;
 }
 
-ErrorOr<bool> Resolver::handleArchiveFile(File &file) {
+llvm::Expected<bool> Resolver::handleArchiveFile(File &file) {
   ArchiveLibraryFile *archiveFile = cast<ArchiveLibraryFile>(&file);
-  return forEachUndefines(file, [&](StringRef undefName) -> ErrorOr<bool> {
+  return forEachUndefines(file,
+                          [&](StringRef undefName) -> llvm::Expected<bool> {
     if (File *member = archiveFile->find(undefName)) {
       member->setOrdinal(_ctx.getNextOrdinalAndIncrement());
       return handleFile(*member);
@@ -81,23 +84,23 @@ ErrorOr<bool> Resolver::handleArchiveFil
   });
 }
 
-std::error_code Resolver::handleSharedLibrary(File &file) {
+llvm::Error Resolver::handleSharedLibrary(File &file) {
   // Add all the atoms from the shared library
   SharedLibraryFile *sharedLibrary = cast<SharedLibraryFile>(&file);
   auto undefAddedOrError = handleFile(*sharedLibrary);
-  if (undefAddedOrError.getError())
-    return undefAddedOrError.getError();
+  if (auto ec = undefAddedOrError.takeError())
+    return std::move(ec);
   undefAddedOrError =
-      forEachUndefines(file, [&](StringRef undefName) -> ErrorOr<bool> {
+      forEachUndefines(file, [&](StringRef undefName) -> llvm::Expected<bool> {
         auto atom = sharedLibrary->exports(undefName);
         if (atom.get())
           doSharedLibraryAtom(std::move(atom));
         return false;
       });
 
-  if (undefAddedOrError.getError())
-    return undefAddedOrError.getError();
-  return std::error_code();
+  if (auto ec = undefAddedOrError.takeError())
+    return std::move(ec);
+  return llvm::Error();
 }
 
 bool Resolver::doUndefinedAtom(OwningAtomPtr<UndefinedAtom> atom) {
@@ -247,9 +250,11 @@ bool Resolver::resolveUndefines() {
       assert(!file->hasOrdinal());
       file->setOrdinal(_ctx.getNextOrdinalAndIncrement());
       auto undefAddedOrError = handleFile(*file);
-      if (undefAddedOrError.getError()) {
-        llvm::errs() << "Error in " + file->path()
-                     << ": " << undefAddedOrError.getError().message() << "\n";
+      if (auto EC = undefAddedOrError.takeError()) {
+        // FIXME: This should be passed to logAllUnhandledErrors but it needs
+        // to be passed a Twine instead of a string.
+        llvm::errs() << "Error in " + file->path() << ": ";
+        logAllUnhandledErrors(std::move(EC), llvm::errs(), std::string());
         return false;
       }
       undefAdded = undefAddedOrError.get();
@@ -259,9 +264,11 @@ bool Resolver::resolveUndefines() {
       if (!file->hasOrdinal())
         file->setOrdinal(_ctx.getNextOrdinalAndIncrement());
       auto undefAddedOrError = handleArchiveFile(*file);
-      if (undefAddedOrError.getError()) {
-        llvm::errs() << "Error in " + file->path()
-                     << ": " << undefAddedOrError.getError().message() << "\n";
+      if (auto EC = undefAddedOrError.takeError()) {
+        // FIXME: This should be passed to logAllUnhandledErrors but it needs
+        // to be passed a Twine instead of a string.
+        llvm::errs() << "Error in " + file->path() << ": ";
+        logAllUnhandledErrors(std::move(EC), llvm::errs(), std::string());
         return false;
       }
       undefAdded = undefAddedOrError.get();
@@ -271,8 +278,10 @@ bool Resolver::resolveUndefines() {
       if (!file->hasOrdinal())
         file->setOrdinal(_ctx.getNextOrdinalAndIncrement());
       if (auto EC = handleSharedLibrary(*file)) {
-        llvm::errs() << "Error in " + file->path()
-                     << ": " << EC.message() << "\n";
+        // FIXME: This should be passed to logAllUnhandledErrors but it needs
+        // to be passed a Twine instead of a string.
+        llvm::errs() << "Error in " + file->path() << ": ";
+        logAllUnhandledErrors(std::move(EC), llvm::errs(), std::string());
         return false;
       }
       break;

Modified: lld/trunk/lib/ReaderWriter/MachO/MachOLinkingContext.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachOLinkingContext.cpp?rev=264924&r1=264923&r2=264924&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/MachO/MachOLinkingContext.cpp (original)
+++ lld/trunk/lib/ReaderWriter/MachO/MachOLinkingContext.cpp Wed Mar 30 15:56:54 2016
@@ -1040,10 +1040,10 @@ void MachOLinkingContext::finalizeInputF
   elements.push_back(llvm::make_unique<GroupEnd>(numLibs));
 }
 
-std::error_code MachOLinkingContext::handleLoadedFile(File &file) {
+llvm::Error MachOLinkingContext::handleLoadedFile(File &file) {
   auto *machoFile = dyn_cast<MachOFile>(&file);
   if (!machoFile)
-    return std::error_code();
+    return llvm::Error();
 
   // Check that the arch of the context matches that of the file.
   // Also set the arch of the context if it didn't have one.
@@ -1051,7 +1051,7 @@ std::error_code MachOLinkingContext::han
     _arch = machoFile->arch();
   } else if (machoFile->arch() != arch_unknown && machoFile->arch() != _arch) {
     // Archs are different.
-    return make_dynamic_error_code(file.path() +
+    return llvm::make_error<GenericError>(file.path() +
                   Twine(" cannot be linked due to incompatible architecture"));
   }
 
@@ -1061,7 +1061,7 @@ std::error_code MachOLinkingContext::han
     _os = machoFile->OS();
   } else if (machoFile->OS() != OS::unknown && machoFile->OS() != _os) {
     // OSes are different.
-    return make_dynamic_error_code(file.path() +
+    return llvm::make_error<GenericError>(file.path() +
               Twine(" cannot be linked due to incompatible operating systems"));
   }
 
@@ -1078,7 +1078,7 @@ std::error_code MachOLinkingContext::han
       // The file is built with simulator objc, so make sure that the context
       // is also building with simulator support.
       if (_os != OS::iOS_simulator)
-        return make_dynamic_error_code(file.path() +
+        return llvm::make_error<GenericError>(file.path() +
           Twine(" cannot be linked.  It contains ObjC built for the simulator"
                 " while we are linking a non-simulator target"));
       assert((_objcConstraint == objc_unknown ||
@@ -1090,7 +1090,7 @@ std::error_code MachOLinkingContext::han
       // The file is built without simulator objc, so make sure that the
       // context is also building without simulator support.
       if (_os == OS::iOS_simulator)
-        return make_dynamic_error_code(file.path() +
+        return llvm::make_error<GenericError>(file.path() +
           Twine(" cannot be linked.  It contains ObjC built for a non-simulator"
                 " target while we are linking a simulator target"));
       assert((_objcConstraint == objc_unknown ||
@@ -1107,10 +1107,10 @@ std::error_code MachOLinkingContext::han
   } else if (machoFile->swiftVersion() &&
              machoFile->swiftVersion() != _swiftVersion) {
     // Swift versions are different.
-    return make_dynamic_error_code("different swift versions");
+    return llvm::make_error<GenericError>("different swift versions");
   }
 
-  return std::error_code();
+  return llvm::Error();
 }
 
 } // end namespace lld




More information about the llvm-commits mailing list