Author: Jan Svoboda
Date: 2026-05-14T18:55:14Z
New Revision: ee21e542b8d377eef5adb128d7d612016f6b7b27

URL: 
https://github.com/llvm/llvm-project/commit/ee21e542b8d377eef5adb128d7d612016f6b7b27
DIFF: 
https://github.com/llvm/llvm-project/commit/ee21e542b8d377eef5adb128d7d612016f6b7b27.diff

LOG: [clang][deps] Expose the tracing VFS directly (#197775)

This adds new `DependencyScanningWorker::getTracingVFS()` API that
allows direct access to the tracing VFS, if present. This replaces the
call to `vfs::FileSystem::visit()` in clang-scan-deps. This will allow
removing `DependencyScanningWorker::getVFS()` and simplifying VFS
overlay handling in a follow-up PR.

Added: 
    

Modified: 
    clang/include/clang/DependencyScanning/DependencyScanningWorker.h
    clang/include/clang/Tooling/DependencyScanningTool.h
    clang/lib/DependencyScanning/DependencyScanningWorker.cpp
    clang/tools/clang-scan-deps/ClangScanDeps.cpp

Removed: 
    


################################################################################
diff  --git a/clang/include/clang/DependencyScanning/DependencyScanningWorker.h 
b/clang/include/clang/DependencyScanning/DependencyScanningWorker.h
index b1c65253f3ef0..881be57c6be85 100644
--- a/clang/include/clang/DependencyScanning/DependencyScanningWorker.h
+++ b/clang/include/clang/DependencyScanning/DependencyScanningWorker.h
@@ -94,13 +94,20 @@ class DependencyScanningWorker {
 
   llvm::vfs::FileSystem &getVFS() const { return *DepFS; }
 
+  /// Returns the worker tracing VFS, if it was requested via the service.
+  llvm::vfs::TracingFileSystem *getTracingVFS() const {
+    return TracingFS.get();
+  }
+
 private:
   /// The parent dependency scanning service.
   DependencyScanningService &Service;
   std::shared_ptr<PCHContainerOperations> PCHContainerOps;
   /// This is the caching (and optionally dependency-directives-providing) VFS
-  /// overlaid on top of the base VFS passed in the constructor.
+  /// overlaid on top of the base VFS.
   IntrusiveRefCntPtr<DependencyScanningWorkerFilesystem> DepFS;
+  /// The tracing VFS overlaid on top of the base VFS.
+  IntrusiveRefCntPtr<llvm::vfs::TracingFileSystem> TracingFS;
 
   friend tooling::CompilerInstanceWithContext;
 };

diff  --git a/clang/include/clang/Tooling/DependencyScanningTool.h 
b/clang/include/clang/Tooling/DependencyScanningTool.h
index e06fd616a31b9..88a0eb0674458 100644
--- a/clang/include/clang/Tooling/DependencyScanningTool.h
+++ b/clang/include/clang/Tooling/DependencyScanningTool.h
@@ -112,7 +112,10 @@ class DependencyScanningTool {
       const llvm::DenseSet<dependencies::ModuleID> &AlreadySeen,
       dependencies::DependencyActionController &Controller);
 
-  llvm::vfs::FileSystem &getWorkerVFS() const { return Worker.getVFS(); }
+  /// Returns the worker tracing VFS, if it was requested via the service.
+  llvm::vfs::TracingFileSystem *getWorkerTracingVFS() const {
+    return Worker.getTracingVFS();
+  }
 
 private:
   dependencies::DependencyScanningWorker Worker;

diff  --git a/clang/lib/DependencyScanning/DependencyScanningWorker.cpp 
b/clang/lib/DependencyScanning/DependencyScanningWorker.cpp
index f5ec8b34f70d6..932ae0bed49e1 100644
--- a/clang/lib/DependencyScanning/DependencyScanningWorker.cpp
+++ b/clang/lib/DependencyScanning/DependencyScanningWorker.cpp
@@ -29,9 +29,11 @@ DependencyScanningWorker::DependencyScanningWorker(
 
   auto BaseFS = Service.getOpts().MakeVFS();
 
-  if (Service.getOpts().TraceVFS)
-    BaseFS = llvm::makeIntrusiveRefCnt<llvm::vfs::TracingFileSystem>(
+  if (Service.getOpts().TraceVFS) {
+    TracingFS = llvm::makeIntrusiveRefCnt<llvm::vfs::TracingFileSystem>(
         std::move(BaseFS));
+    BaseFS = TracingFS;
+  }
 
   DepFS = llvm::makeIntrusiveRefCnt<DependencyScanningWorkerFilesystem>(
       Service.getSharedCache(), std::move(BaseFS));

diff  --git a/clang/tools/clang-scan-deps/ClangScanDeps.cpp 
b/clang/tools/clang-scan-deps/ClangScanDeps.cpp
index 969428a6fe621..5322178a848e2 100644
--- a/clang/tools/clang-scan-deps/ClangScanDeps.cpp
+++ b/clang/tools/clang-scan-deps/ClangScanDeps.cpp
@@ -1159,16 +1159,14 @@ int clang_scan_deps_main(int argc, char **argv, const 
llvm::ToolContext &) {
       }
     }
 
-    WorkerTool.getWorkerVFS().visit([&](llvm::vfs::FileSystem &VFS) {
-      if (auto *T = dyn_cast_or_null<llvm::vfs::TracingFileSystem>(&VFS)) {
-        NumStatusCalls += T->NumStatusCalls;
-        NumOpenFileForReadCalls += T->NumOpenFileForReadCalls;
-        NumDirBeginCalls += T->NumDirBeginCalls;
-        NumGetRealPathCalls += T->NumGetRealPathCalls;
-        NumExistsCalls += T->NumExistsCalls;
-        NumIsLocalCalls += T->NumIsLocalCalls;
-      }
-    });
+    if (auto *T = WorkerTool.getWorkerTracingVFS()) {
+      NumStatusCalls += T->NumStatusCalls;
+      NumOpenFileForReadCalls += T->NumOpenFileForReadCalls;
+      NumDirBeginCalls += T->NumDirBeginCalls;
+      NumGetRealPathCalls += T->NumGetRealPathCalls;
+      NumExistsCalls += T->NumExistsCalls;
+      NumIsLocalCalls += T->NumIsLocalCalls;
+    }
   };
 
   DependencyScanningServiceOptions Opts;


        
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to