[clang] [clang][DependencyScanning] Move driver-command logic for by-name scanning into DependencyScanningTool (PR #171238)
Qiongsi Wu via cfe-commits
cfe-commits at lists.llvm.org
Thu Dec 11 13:07:15 PST 2025
================
@@ -713,38 +714,31 @@ bool DependencyScanningAction::runInvocation(
return Result;
}
-bool CompilerInstanceWithContext::initialize(DiagnosticConsumer *DC) {
- if (DC) {
- DiagConsumer = DC;
- } else {
- DiagPrinterWithOS =
- std::make_unique<TextDiagnosticsPrinterWithOutput>(CommandLine);
- DiagConsumer = &DiagPrinterWithOS->DiagPrinter;
+bool CompilerInstanceWithContext::initialize(
+ std::unique_ptr<DiagnosticsEngineWithDiagOpts> DiagEngineWithDiagOpts,
+ IntrusiveRefCntPtr<llvm::vfs::OverlayFileSystem> OverlayFS) {
+ assert(DiagEngineWithDiagOpts && "Valid diagnostics engine required!");
+ DiagEngineWithCmdAndOpts = std::move(DiagEngineWithDiagOpts);
+ DiagConsumer = DiagEngineWithCmdAndOpts->DiagEngine->getClient();
+
+ IntrusiveRefCntPtr<llvm::vfs::FileSystem> FS = Worker.DepFS;
+ if (OverlayFS) {
+#ifndef NDEBUG
+ bool SawDepFS = false;
+ OverlayFS->visit([&](llvm::vfs::FileSystem &VFS) {
+ SawDepFS |= &VFS == Worker.DepFS.get();
+ });
+ assert(SawDepFS && "OverlayFS not based on DepFS");
+#endif
+ FS = std::move(OverlayFS);
}
- std::tie(OverlayFS, CommandLine) = initVFSForByNameScanning(
- Worker.DepFS, CommandLine, CWD, "ScanningByName");
-
- DiagEngineWithCmdAndOpts = std::make_unique<DiagnosticsEngineWithDiagOpts>(
- CommandLine, OverlayFS, *DiagConsumer);
-
- std::tie(Driver, Compilation) = buildCompilation(
- CommandLine, *DiagEngineWithCmdAndOpts->DiagEngine, OverlayFS, Alloc);
-
- if (!Compilation)
- return false;
+ // Reset what might have been modified in the previous worker invocation.
+ FS->setCurrentWorkingDirectory(CWD);
----------------
qiongsiwu wrote:
Hmmm maybe I am missing something. Could you help me understand why we need to reset the working directory here? Is it because at this point, we don't know if there will be an OverlayFS and hence we re not sure? If I understand the code correctly, the earlier call to `initVFSForByNameScanning` should set the `FS` correctly.
https://github.com/llvm/llvm-project/pull/171238
More information about the cfe-commits
mailing list