[lld] r264979 - Change library search methods to return Optional instead of ErrorOr.

Pete Cooper via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 30 18:09:36 PDT 2016


Author: pete
Date: Wed Mar 30 20:09:35 2016
New Revision: 264979

URL: http://llvm.org/viewvc/llvm-project?rev=264979&view=rev
Log:
Change library search methods to return Optional instead of ErrorOr.

These methods weren't really throwing errors.  The only error used
was that a file could not be found, which isn't really an error at all
as we are searching paths and libraries for a file.  All of the callers
also ignored errors and just used the returned path if one was available.

Changing to return Optional<StringRef> as that actually reflects what
we are trying to do here: optionally find a given path.

Modified:
    lld/trunk/include/lld/ReaderWriter/MachOLinkingContext.h
    lld/trunk/lib/Driver/DarwinLdDriver.cpp
    lld/trunk/lib/ReaderWriter/MachO/MachOLinkingContext.cpp

Modified: lld/trunk/include/lld/ReaderWriter/MachOLinkingContext.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/MachOLinkingContext.h?rev=264979&r1=264978&r2=264979&view=diff
==============================================================================
--- lld/trunk/include/lld/ReaderWriter/MachOLinkingContext.h (original)
+++ lld/trunk/include/lld/ReaderWriter/MachOLinkingContext.h Wed Mar 30 20:09:35 2016
@@ -225,12 +225,12 @@ public:
   /// The -lFoo option is documented to search for libFoo.dylib and libFoo.a in
   /// that order, unless Foo ends in ".o", in which case only the exact file
   /// matches (e.g. -lfoo.o would only find foo.o).
-  ErrorOr<StringRef> searchDirForLibrary(StringRef path,
-                                         StringRef libName) const;
+  llvm::Optional<StringRef> searchDirForLibrary(StringRef path,
+                                                StringRef libName) const;
 
   /// \brief Iterates through all search path entries looking for libName (as
   /// specified by -lFoo).
-  ErrorOr<StringRef> searchLibrary(StringRef libName) const;
+  llvm::Optional<StringRef> searchLibrary(StringRef libName) const;
 
   /// Add a framework search path.  Internally, this method may be prepended
   /// the path with syslibroot.
@@ -238,7 +238,7 @@ public:
 
   /// \brief Iterates through all framework directories looking for
   /// Foo.framework/Foo (when fwName = "Foo").
-  ErrorOr<StringRef> findPathForFramework(StringRef fwName) const;
+  llvm::Optional<StringRef> findPathForFramework(StringRef fwName) const;
 
   /// \brief The dylib's binary compatibility version, in the raw uint32 format.
   ///

Modified: lld/trunk/lib/Driver/DarwinLdDriver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/DarwinLdDriver.cpp?rev=264979&r1=264978&r2=264979&view=diff
==============================================================================
--- lld/trunk/lib/Driver/DarwinLdDriver.cpp (original)
+++ lld/trunk/lib/Driver/DarwinLdDriver.cpp Wed Mar 30 20:09:35 2016
@@ -1053,7 +1053,7 @@ bool parse(llvm::ArrayRef<const char *>
   // Handle input files and sectcreate.
   for (auto &arg : parsedArgs) {
     bool upward;
-    ErrorOr<StringRef> resolvedPath = StringRef();
+    llvm::Optional<StringRef> resolvedPath;
     switch (arg->getOption().getID()) {
     default:
       continue;
@@ -1076,9 +1076,10 @@ bool parse(llvm::ArrayRef<const char *>
         return false;
       } else if (ctx.testingFileUsage()) {
         diagnostics << "Found " << (upward ? "upward " : " ") << "library "
-                   << canonicalizePath(resolvedPath.get()) << '\n';
+                   << canonicalizePath(resolvedPath.getValue()) << '\n';
       }
-      addFile(resolvedPath.get(), ctx, globalWholeArchive, upward, diagnostics);
+      addFile(resolvedPath.getValue(), ctx, globalWholeArchive,
+              upward, diagnostics);
       break;
     case OPT_framework:
     case OPT_upward_framework:
@@ -1090,9 +1091,10 @@ bool parse(llvm::ArrayRef<const char *>
         return false;
       } else if (ctx.testingFileUsage()) {
         diagnostics << "Found " << (upward ? "upward " : " ") << "framework "
-                    << canonicalizePath(resolvedPath.get()) << '\n';
+                    << canonicalizePath(resolvedPath.getValue()) << '\n';
       }
-      addFile(resolvedPath.get(), ctx, globalWholeArchive, upward, diagnostics);
+      addFile(resolvedPath.getValue(), ctx, globalWholeArchive,
+              upward, diagnostics);
       break;
     case OPT_filelist:
       if (auto ec = loadFileList(arg->getValue(),

Modified: lld/trunk/lib/ReaderWriter/MachO/MachOLinkingContext.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachOLinkingContext.cpp?rev=264979&r1=264978&r2=264979&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/MachO/MachOLinkingContext.cpp (original)
+++ lld/trunk/lib/ReaderWriter/MachO/MachOLinkingContext.cpp Wed Mar 30 20:09:35 2016
@@ -530,7 +530,7 @@ void MachOLinkingContext::addFrameworkSe
     _frameworkDirs.push_back(fwPath);
 }
 
-ErrorOr<StringRef>
+llvm::Optional<StringRef>
 MachOLinkingContext::searchDirForLibrary(StringRef path,
                                          StringRef libName) const {
   SmallString<256> fullPath;
@@ -540,7 +540,7 @@ MachOLinkingContext::searchDirForLibrary
     llvm::sys::path::append(fullPath, libName);
     if (fileExists(fullPath))
       return fullPath.str().copy(_allocator);
-    return make_error_code(llvm::errc::no_such_file_or_directory);
+    return llvm::None;
   }
 
   // Search for dynamic library
@@ -555,21 +555,23 @@ MachOLinkingContext::searchDirForLibrary
   if (fileExists(fullPath))
     return fullPath.str().copy(_allocator);
 
-  return make_error_code(llvm::errc::no_such_file_or_directory);
+  return llvm::None;
 }
 
-ErrorOr<StringRef> MachOLinkingContext::searchLibrary(StringRef libName) const {
+llvm::Optional<StringRef>
+MachOLinkingContext::searchLibrary(StringRef libName) const {
   SmallString<256> path;
   for (StringRef dir : searchDirs()) {
-    ErrorOr<StringRef> ec = searchDirForLibrary(dir, libName);
-    if (ec)
-      return ec;
+    llvm::Optional<StringRef> searchDir = searchDirForLibrary(dir, libName);
+    if (searchDir)
+      return searchDir;
   }
 
-  return make_error_code(llvm::errc::no_such_file_or_directory);
+  return llvm::None;
 }
 
-ErrorOr<StringRef> MachOLinkingContext::findPathForFramework(StringRef fwName) const{
+llvm::Optional<StringRef>
+MachOLinkingContext::findPathForFramework(StringRef fwName) const{
   SmallString<256> fullPath;
   for (StringRef dir : frameworkDirs()) {
     fullPath.assign(dir);
@@ -578,7 +580,7 @@ ErrorOr<StringRef> MachOLinkingContext::
       return fullPath.str().copy(_allocator);
   }
 
-  return make_error_code(llvm::errc::no_such_file_or_directory);
+  return llvm::None;
 }
 
 bool MachOLinkingContext::validateImpl(raw_ostream &diagnostics) {
@@ -706,9 +708,8 @@ MachODylibFile* MachOLinkingContext::fin
   if (leafName.startswith("lib") && leafName.endswith(".dylib")) {
     // FIXME: Need to enhance searchLibrary() to only look for .dylib
     auto libPath = searchLibrary(leafName);
-    if (!libPath.getError()) {
-      return loadIndirectDylib(libPath.get());
-    }
+    if (libPath)
+      return loadIndirectDylib(libPath.getValue());
   }
 
   // Try full path with sysroot.




More information about the llvm-commits mailing list