[PATCH] D109128: [VFS] Use original path when falling back to external FS

Keith Smiley via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 1 21:01:28 PDT 2021


keith created this revision.
keith added a reviewer: JDevlieghere.
Herald added subscribers: dexonsmith, hiraditya.
keith requested review of this revision.
Herald added projects: clang, LLVM.
Herald added subscribers: llvm-commits, cfe-commits.

This is a follow up to 0be9ca7c0f9a733f846bb6bc4e8e36d46b518162 <https://reviews.llvm.org/rG0be9ca7c0f9a733f846bb6bc4e8e36d46b518162> to make
paths in the case of falling back to the external file system use the
original format, preserving relative paths, and allow the external
filesystem to canonicalize them if needed.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D109128

Files:
  clang/test/VFS/relative-path-errors.c
  llvm/lib/Support/VirtualFileSystem.cpp


Index: llvm/lib/Support/VirtualFileSystem.cpp
===================================================================
--- llvm/lib/Support/VirtualFileSystem.cpp
+++ llvm/lib/Support/VirtualFileSystem.cpp
@@ -1202,7 +1202,7 @@
   if (!Result) {
     EC = Result.getError();
     if (shouldFallBackToExternalFS(EC))
-      return ExternalFS->dir_begin(Path, EC);
+      return ExternalFS->dir_begin(Dir, EC);
     return {};
   }
 
@@ -1967,13 +1967,13 @@
   ErrorOr<RedirectingFileSystem::LookupResult> Result = lookupPath(Path);
   if (!Result) {
     if (shouldFallBackToExternalFS(Result.getError()))
-      return ExternalFS->status(Path);
+      return ExternalFS->status(Path_);
     return Result.getError();
   }
 
   ErrorOr<Status> S = status(Path, *Result);
   if (!S && shouldFallBackToExternalFS(S.getError(), Result->E))
-    S = ExternalFS->status(Path);
+    S = ExternalFS->status(Path_);
   return S;
 }
 
@@ -2013,7 +2013,7 @@
   ErrorOr<RedirectingFileSystem::LookupResult> Result = lookupPath(Path);
   if (!Result) {
     if (shouldFallBackToExternalFS(Result.getError()))
-      return ExternalFS->openFileForRead(Path);
+      return ExternalFS->openFileForRead(Path_);
     return Result.getError();
   }
 
@@ -2026,7 +2026,7 @@
   auto ExternalFile = ExternalFS->openFileForRead(ExtRedirect);
   if (!ExternalFile) {
     if (shouldFallBackToExternalFS(ExternalFile.getError(), Result->E))
-      return ExternalFS->openFileForRead(Path);
+      return ExternalFS->openFileForRead(Path_);
     return ExternalFile;
   }
 
@@ -2053,7 +2053,7 @@
   ErrorOr<RedirectingFileSystem::LookupResult> Result = lookupPath(Path);
   if (!Result) {
     if (shouldFallBackToExternalFS(Result.getError()))
-      return ExternalFS->getRealPath(Path, Output);
+      return ExternalFS->getRealPath(Path_, Output);
     return Result.getError();
   }
 
@@ -2062,14 +2062,14 @@
   if (auto ExtRedirect = Result->getExternalRedirect()) {
     auto P = ExternalFS->getRealPath(*ExtRedirect, Output);
     if (!P && shouldFallBackToExternalFS(P, Result->E)) {
-      return ExternalFS->getRealPath(Path, Output);
+      return ExternalFS->getRealPath(Path_, Output);
     }
     return P;
   }
 
   // If we found a DirectoryEntry, still fall back to ExternalFS if allowed,
   // because directories don't have a single external contents path.
-  return shouldUseExternalFS() ? ExternalFS->getRealPath(Path, Output)
+  return shouldUseExternalFS() ? ExternalFS->getRealPath(Path_, Output)
                                : llvm::errc::invalid_argument;
 }
 
Index: clang/test/VFS/relative-path-errors.c
===================================================================
--- /dev/null
+++ clang/test/VFS/relative-path-errors.c
@@ -0,0 +1,8 @@
+// RUN: mkdir -p %t
+// RUN: cd %t
+// RUN: echo '{"roots": [],"version": 0}' > %t.yaml
+// RUN: cp %s main.c
+// RUN: not %clang_cc1 -ivfsoverlay %t.yaml main.c 2>&1 | FileCheck %s
+
+// CHECK: {{^}}main.c:8:1: error:
+foobarbaz


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D109128.370153.patch
Type: text/x-patch
Size: 2976 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210902/99dd92d7/attachment.bin>


More information about the llvm-commits mailing list