[clang] [clang][deps] Overload `Filesystem::exists` in `DependencyScanningFilesystem` to have it use cached `status` (PR #88152)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Apr 9 09:47:25 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Artem Chikin (artemcm)
<details>
<summary>Changes</summary>
As-is, calls to `exists()` fallback on the implementation in `ProxyFileSystem::exists` which explicitly calls out to the underlying `FS`, which for the `DependencyScanningFilesystem` (overlay) is the real underlying filesystem.
Instead, directly overloading `exists` allows us to have it rely on the cached `status` behavior used elsewhere by the `DependencyScanningFilesystem`.
---
Full diff: https://github.com/llvm/llvm-project/pull/88152.diff
2 Files Affected:
- (modified) clang/include/clang/Tooling/DependencyScanning/DependencyScanningFilesystem.h (+4)
- (modified) clang/lib/Tooling/DependencyScanning/DependencyScanningFilesystem.cpp (+6)
``````````diff
diff --git a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningFilesystem.h b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningFilesystem.h
index 9a522a3e2fe252..4fdfebada5b7f7 100644
--- a/clang/include/clang/Tooling/DependencyScanning/DependencyScanningFilesystem.h
+++ b/clang/include/clang/Tooling/DependencyScanning/DependencyScanningFilesystem.h
@@ -365,6 +365,10 @@ class DependencyScanningWorkerFilesystem
return LocalCache.insertEntryForFilename(Filename, Entry);
}
+ /// Check whether \p Path exists. By default checks cached result of \c status(),
+ /// and falls back on FS if unable to do so.
+ bool exists(const Twine &Path) override;
+
/// Returns entry associated with the filename in the shared cache if there is
/// some. Otherwise, constructs new one with the given error code, associates
/// it with the filename and returns the result.
diff --git a/clang/lib/Tooling/DependencyScanning/DependencyScanningFilesystem.cpp b/clang/lib/Tooling/DependencyScanning/DependencyScanningFilesystem.cpp
index 9b7812a1adb9e3..174edc98da5877 100644
--- a/clang/lib/Tooling/DependencyScanning/DependencyScanningFilesystem.cpp
+++ b/clang/lib/Tooling/DependencyScanning/DependencyScanningFilesystem.cpp
@@ -270,6 +270,12 @@ DependencyScanningWorkerFilesystem::status(const Twine &Path) {
return Result->getStatus();
}
+bool
+DependencyScanningWorkerFilesystem::exists(const Twine &Path) {
+ auto Status = status(Path);
+ return Status && Status->exists();
+}
+
namespace {
/// The VFS that is used by clang consumes the \c CachedFileSystemEntry using
``````````
</details>
https://github.com/llvm/llvm-project/pull/88152
More information about the cfe-commits
mailing list