From 6062dc2aa55d0dceec308cb61a4287f5ede8b487 Mon Sep 17 00:00:00 2001 From: Volodymyr Sapsai Date: Wed, 12 Nov 2025 22:00:45 -0800 Subject: [PATCH 1/2] [clang][deps] Track VFS overlay files in file dependencies. rdar://164612831 --- clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp | 4 ++++ clang/test/ClangScanDeps/modules-header-sharing.m | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp index 0022597348a82..56a364545cd2a 100644 --- a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp +++ b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp @@ -616,6 +616,10 @@ void ModuleDepCollectorPP::EndOfMainFile() { if (!MDC.ScanInstance.getPreprocessorOpts().ImplicitPCHInclude.empty()) MDC.addFileDep(MDC.ScanInstance.getPreprocessorOpts().ImplicitPCHInclude); + for (const std::string &Overlay : + MDC.ScanInstance.getHeaderSearchOpts().VFSOverlayFiles) + MDC.addFileDep(Overlay); + for (const Module *M : MDC.ScanInstance.getPreprocessor().getAffectingClangModules()) if (!MDC.isPrebuiltModule(M)) diff --git a/clang/test/ClangScanDeps/modules-header-sharing.m b/clang/test/ClangScanDeps/modules-header-sharing.m index 31ef351ec38b7..9bba435188721 100644 --- a/clang/test/ClangScanDeps/modules-header-sharing.m +++ b/clang/test/ClangScanDeps/modules-header-sharing.m @@ -79,7 +79,8 @@ // CHECK: ], // CHECK: "file-deps": [ // CHECK-NEXT: "[[PREFIX]]/tu.m", -// CHECK-NEXT: "[[PREFIX]]/shared/H.h" +// CHECK-NEXT: "[[PREFIX]]/shared/H.h", +// CHECK-NEXT: "[[PREFIX]]/overlay.json" // CHECK-NEXT: ], // CHECK-NEXT: "input-file": "[[PREFIX]]/tu.m" // CHECK-NEXT: } From 6dfaed0c67ce3fae857d2abc13451593e6a506d1 Mon Sep 17 00:00:00 2001 From: Volodymyr Sapsai Date: Thu, 13 Nov 2025 14:01:16 -0800 Subject: [PATCH 2/2] Change type per review request. Change variable name to fit on a line. It is OK to use `StringRef` because the method type is `void ModuleDepCollector::addFileDep(StringRef Path)` so we aren't adding extra unnecessary `StringRef` instances. --- clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp index 56a364545cd2a..80d242a477a3a 100644 --- a/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp +++ b/clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp @@ -616,9 +616,8 @@ void ModuleDepCollectorPP::EndOfMainFile() { if (!MDC.ScanInstance.getPreprocessorOpts().ImplicitPCHInclude.empty()) MDC.addFileDep(MDC.ScanInstance.getPreprocessorOpts().ImplicitPCHInclude); - for (const std::string &Overlay : - MDC.ScanInstance.getHeaderSearchOpts().VFSOverlayFiles) - MDC.addFileDep(Overlay); + for (StringRef VFS : MDC.ScanInstance.getHeaderSearchOpts().VFSOverlayFiles) + MDC.addFileDep(VFS); for (const Module *M : MDC.ScanInstance.getPreprocessor().getAffectingClangModules())