[PATCH] D51573: [Driver] Search LibraryPaths when handling -print-file-name

Petr Hosek via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sat Sep 1 14:51:30 PDT 2018


phosek created this revision.
phosek added a reviewer: beanz.
Herald added a subscriber: cfe-commits.

This is necessary to handle the multiarch runtime directories.


Repository:
  rC Clang

https://reviews.llvm.org/D51573

Files:
  clang/lib/Driver/Driver.cpp


Index: clang/lib/Driver/Driver.cpp
===================================================================
--- clang/lib/Driver/Driver.cpp
+++ clang/lib/Driver/Driver.cpp
@@ -4166,16 +4166,23 @@
 }
 
 std::string Driver::GetFilePath(StringRef Name, const ToolChain &TC) const {
+  auto FindPath = [&](const llvm::SmallVectorImpl<std::string> &P)
+      -> llvm::Optional<std::string> {
+    for (const std::string &Dir : P) {
+      if (Dir.empty())
+        continue;
+      SmallString<128> P(Dir[0] == '=' ? SysRoot + Dir.substr(1) : Dir);
+      llvm::sys::path::append(P, Name);
+      if (llvm::sys::fs::exists(Twine(P)))
+        return std::string(P.str());
+    }
+    return None;
+  };
+
   // Respect a limited subset of the '-Bprefix' functionality in GCC by
   // attempting to use this prefix when looking for file paths.
-  for (const std::string &Dir : PrefixDirs) {
-    if (Dir.empty())
-      continue;
-    SmallString<128> P(Dir[0] == '=' ? SysRoot + Dir.substr(1) : Dir);
-    llvm::sys::path::append(P, Name);
-    if (llvm::sys::fs::exists(Twine(P)))
-      return P.str();
-  }
+  if (Optional<std::string> D = FindPath(PrefixDirs))
+    return *D;
 
   SmallString<128> R(ResourceDir);
   llvm::sys::path::append(R, Name);
@@ -4187,14 +4194,11 @@
   if (llvm::sys::fs::exists(Twine(P)))
     return P.str();
 
-  for (const std::string &Dir : TC.getFilePaths()) {
-    if (Dir.empty())
-      continue;
-    SmallString<128> P(Dir[0] == '=' ? SysRoot + Dir.substr(1) : Dir);
-    llvm::sys::path::append(P, Name);
-    if (llvm::sys::fs::exists(Twine(P)))
-      return P.str();
-  }
+  if (Optional<std::string> D = FindPath(TC.getLibraryPaths()))
+    return *D;
+
+  if (Optional<std::string> D = FindPath(TC.getFilePaths()))
+    return *D;
 
   return Name;
 }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D51573.163629.patch
Type: text/x-patch
Size: 1789 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180901/bb1dd189/attachment.bin>


More information about the cfe-commits mailing list