From bdd10d9d249bd1c2a45e3de56a5accd97e953458 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?kadir=20=C3=A7etinkaya?= Date: Thu, 21 Nov 2024 12:11:41 +0100 Subject: [NFC] Explicitly pass a VFS when creating DiagnosticsEngine (#115852) Starting with 41e3919ded78d8870f7c95e9181c7f7e29aa3cc4 DiagnosticsEngine creation might perform IO. It was implicitly defaulting to getRealFileSystem. This patch makes it explicit by pushing the decision making to callers. It uses ambient VFS if one is available, and keeps using `getRealFileSystem` if there aren't any VFS. --- clang/lib/Frontend/CompilerInstance.cpp | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) (limited to 'clang/lib/Frontend/CompilerInstance.cpp') diff --git a/clang/lib/Frontend/CompilerInstance.cpp b/clang/lib/Frontend/CompilerInstance.cpp index ecc6782..fbfc305 100644 --- a/clang/lib/Frontend/CompilerInstance.cpp +++ b/clang/lib/Frontend/CompilerInstance.cpp @@ -332,23 +332,20 @@ static void SetupSerializedDiagnostics(DiagnosticOptions *DiagOpts, } } -void CompilerInstance::createDiagnostics(DiagnosticConsumer *Client, +void CompilerInstance::createDiagnostics(llvm::vfs::FileSystem &VFS, + DiagnosticConsumer *Client, bool ShouldOwnClient) { - Diagnostics = createDiagnostics( - &getDiagnosticOpts(), Client, ShouldOwnClient, &getCodeGenOpts(), - FileMgr ? FileMgr->getVirtualFileSystemPtr() : nullptr); + Diagnostics = createDiagnostics(VFS, &getDiagnosticOpts(), Client, + ShouldOwnClient, &getCodeGenOpts()); } IntrusiveRefCntPtr CompilerInstance::createDiagnostics( - DiagnosticOptions *Opts, DiagnosticConsumer *Client, bool ShouldOwnClient, - const CodeGenOptions *CodeGenOpts, - llvm::IntrusiveRefCntPtr VFS) { + llvm::vfs::FileSystem &VFS, DiagnosticOptions *Opts, + DiagnosticConsumer *Client, bool ShouldOwnClient, + const CodeGenOptions *CodeGenOpts) { IntrusiveRefCntPtr DiagID(new DiagnosticIDs()); - IntrusiveRefCntPtr - Diags(new DiagnosticsEngine(DiagID, Opts)); - - if (!VFS) - VFS = llvm::vfs::getRealFileSystem(); + IntrusiveRefCntPtr Diags( + new DiagnosticsEngine(DiagID, Opts)); // Create the diagnostic client for reporting errors or for // implementing -verify. @@ -372,7 +369,7 @@ IntrusiveRefCntPtr CompilerInstance::createDiagnostics( Opts->DiagnosticSerializationFile); // Configure our handling of diagnostics. - ProcessWarningOptions(*Diags, *Opts, *VFS); + ProcessWarningOptions(*Diags, *Opts, VFS); return Diags; } @@ -1240,9 +1237,10 @@ compileModuleImpl(CompilerInstance &ImportingInstance, SourceLocation ImportLoc, auto &Inv = *Invocation; Instance.setInvocation(std::move(Invocation)); - Instance.createDiagnostics(new ForwardingDiagnosticConsumer( - ImportingInstance.getDiagnosticClient()), - /*ShouldOwnClient=*/true); + Instance.createDiagnostics( + ImportingInstance.getVirtualFileSystem(), + new ForwardingDiagnosticConsumer(ImportingInstance.getDiagnosticClient()), + /*ShouldOwnClient=*/true); if (llvm::is_contained(DiagOpts.SystemHeaderWarningsModules, ModuleName)) Instance.getDiagnostics().setSuppressSystemWarnings(false); -- cgit v1.1