diff --git a/clang-tools-extra/clang-include-fixer/IncludeFixer.cpp b/clang-tools-extra/clang-include-fixer/IncludeFixer.cpp index 354f35cbadbeb..bba8f8acc77da 100644 --- a/clang-tools-extra/clang-include-fixer/IncludeFixer.cpp +++ b/clang-tools-extra/clang-include-fixer/IncludeFixer.cpp @@ -95,7 +95,8 @@ bool IncludeFixerActionFactory::runInvocation( // Create the compiler's actual diagnostics engine. We want to drop all // diagnostics here. - Compiler.createDiagnostics(new clang::IgnoringDiagConsumer, + Compiler.createDiagnostics(Files->getVirtualFileSystem(), + new clang::IgnoringDiagConsumer, /*ShouldOwnClient=*/true); Compiler.createSourceManager(*Files); diff --git a/clang-tools-extra/clangd/Compiler.cpp b/clang-tools-extra/clangd/Compiler.cpp index c60ab8e1b8062..161cc9ae0ca36 100644 --- a/clang-tools-extra/clangd/Compiler.cpp +++ b/clang-tools-extra/clangd/Compiler.cpp @@ -110,8 +110,8 @@ buildCompilerInvocation(const ParseInputs &Inputs, clang::DiagnosticConsumer &D, CIOpts.VFS = Inputs.TFS->view(Inputs.CompileCommand.Directory); CIOpts.CC1Args = CC1Args; CIOpts.RecoverOnError = true; - CIOpts.Diags = - CompilerInstance::createDiagnostics(new DiagnosticOptions, &D, false); + CIOpts.Diags = CompilerInstance::createDiagnostics( + *CIOpts.VFS, new DiagnosticOptions, &D, false); CIOpts.ProbePrecompiled = false; std::unique_ptr CI = createInvocation(ArgStrs, CIOpts); if (!CI) @@ -148,7 +148,7 @@ prepareCompilerInstance(std::unique_ptr CI, auto Clang = std::make_unique( std::make_shared()); Clang->setInvocation(std::move(CI)); - Clang->createDiagnostics(&DiagsClient, false); + Clang->createDiagnostics(*VFS, &DiagsClient, false); if (auto VFSWithRemapping = createVFSFromCompilerInvocation( Clang->getInvocation(), Clang->getDiagnostics(), VFS)) diff --git a/clang-tools-extra/clangd/ModulesBuilder.cpp b/clang-tools-extra/clangd/ModulesBuilder.cpp index 2bce3a2082561..29508901f85bb 100644 --- a/clang-tools-extra/clangd/ModulesBuilder.cpp +++ b/clang-tools-extra/clangd/ModulesBuilder.cpp @@ -188,7 +188,8 @@ bool IsModuleFileUpToDate(PathRef ModuleFilePath, clang::clangd::IgnoreDiagnostics IgnoreDiags; IntrusiveRefCntPtr Diags = - CompilerInstance::createDiagnostics(new DiagnosticOptions, &IgnoreDiags, + CompilerInstance::createDiagnostics(*VFS, new DiagnosticOptions, + &IgnoreDiags, /*ShouldOwnClient=*/false); LangOptions LangOpts; diff --git a/clang-tools-extra/clangd/Preamble.cpp b/clang-tools-extra/clangd/Preamble.cpp index c14c4d1ba103f..ce88ec0eb88c1 100644 --- a/clang-tools-extra/clangd/Preamble.cpp +++ b/clang-tools-extra/clangd/Preamble.cpp @@ -613,8 +613,9 @@ buildPreamble(PathRef FileName, CompilerInvocation CI, for (const auto &L : ASTListeners) L->sawDiagnostic(D, Diag); }); + auto VFS = Inputs.TFS->view(Inputs.CompileCommand.Directory); llvm::IntrusiveRefCntPtr PreambleDiagsEngine = - CompilerInstance::createDiagnostics(&CI.getDiagnosticOpts(), + CompilerInstance::createDiagnostics(*VFS, &CI.getDiagnosticOpts(), &PreambleDiagnostics, /*ShouldOwnClient=*/false); const Config &Cfg = Config::current(); @@ -651,7 +652,6 @@ buildPreamble(PathRef FileName, CompilerInvocation CI, for (const auto &L : ASTListeners) L->beforeExecute(CI); }); - auto VFS = Inputs.TFS->view(Inputs.CompileCommand.Directory); llvm::SmallString<32> AbsFileName(FileName); VFS->makeAbsolute(AbsFileName); auto StatCache = std::make_shared(AbsFileName); diff --git a/clang-tools-extra/include-cleaner/unittests/RecordTest.cpp b/clang-tools-extra/include-cleaner/unittests/RecordTest.cpp index b5a7b9720903e..b1bbb2eb82414 100644 --- a/clang-tools-extra/include-cleaner/unittests/RecordTest.cpp +++ b/clang-tools-extra/include-cleaner/unittests/RecordTest.cpp @@ -609,15 +609,6 @@ TEST_F(PragmaIncludeTest, ExportInUnnamedBuffer) { )cpp"; Inputs.ExtraFiles["foo.h"] = ""; - auto Clang = std::make_unique( - std::make_shared()); - Clang->createDiagnostics(); - - Clang->setInvocation(std::make_unique()); - ASSERT_TRUE(CompilerInvocation::CreateFromArgs( - Clang->getInvocation(), {Filename.data()}, Clang->getDiagnostics(), - "clang")); - // Create unnamed memory buffers for all the files. auto VFS = llvm::makeIntrusiveRefCnt(); VFS->addFile(Filename, /*ModificationTime=*/0, @@ -626,6 +617,16 @@ TEST_F(PragmaIncludeTest, ExportInUnnamedBuffer) { VFS->addFile(Extra.getKey(), /*ModificationTime=*/0, llvm::MemoryBuffer::getMemBufferCopy(Extra.getValue(), /*BufferName=*/"")); + + auto Clang = std::make_unique( + std::make_shared()); + Clang->createDiagnostics(*VFS); + + Clang->setInvocation(std::make_unique()); + ASSERT_TRUE(CompilerInvocation::CreateFromArgs( + Clang->getInvocation(), {Filename.data()}, Clang->getDiagnostics(), + "clang")); + auto *FM = Clang->createFileManager(VFS); ASSERT_TRUE(Clang->ExecuteAction(*Inputs.MakeAction())); EXPECT_THAT( diff --git a/clang/include/clang/Frontend/CompilerInstance.h b/clang/include/clang/Frontend/CompilerInstance.h index 338eb3c6bd028..1220a4e29471d 100644 --- a/clang/include/clang/Frontend/CompilerInstance.h +++ b/clang/include/clang/Frontend/CompilerInstance.h @@ -675,13 +675,17 @@ class CompilerInstance : public ModuleLoader { /// Note that this routine also replaces the diagnostic client, /// allocating one if one is not provided. /// + /// \param VFS is used for any IO needed when creating DiagnosticsEngine. It + /// doesn't replace VFS in the CompilerInstance (if any). + /// /// \param Client If non-NULL, a diagnostic client that will be /// attached to (and, then, owned by) the DiagnosticsEngine inside this AST /// unit. /// /// \param ShouldOwnClient If Client is non-NULL, specifies whether /// the diagnostic object should take ownership of the client. - void createDiagnostics(DiagnosticConsumer *Client = nullptr, + void createDiagnostics(llvm::vfs::FileSystem &VFS, + DiagnosticConsumer *Client = nullptr, bool ShouldOwnClient = true); /// Create a DiagnosticsEngine object with a the TextDiagnosticPrinter. @@ -702,10 +706,11 @@ class CompilerInstance : public ModuleLoader { /// used by some diagnostics printers (for logging purposes only). /// /// \return The new object on success, or null on failure. - static IntrusiveRefCntPtr createDiagnostics( - DiagnosticOptions *Opts, DiagnosticConsumer *Client = nullptr, - bool ShouldOwnClient = true, const CodeGenOptions *CodeGenOpts = nullptr, - IntrusiveRefCntPtr VFS = nullptr); + static IntrusiveRefCntPtr + createDiagnostics(llvm::vfs::FileSystem &VFS, DiagnosticOptions *Opts, + DiagnosticConsumer *Client = nullptr, + bool ShouldOwnClient = true, + const CodeGenOptions *CodeGenOpts = nullptr); /// Create the file manager and replace any existing one with it. /// diff --git a/clang/lib/Frontend/CompilerInstance.cpp b/clang/lib/Frontend/CompilerInstance.cpp index ecc6782c7cb4f..fbfc305ca06a0 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); diff --git a/clang/lib/Frontend/CreateInvocationFromCommandLine.cpp b/clang/lib/Frontend/CreateInvocationFromCommandLine.cpp index 638757a245024..d0b855fff2534 100644 --- a/clang/lib/Frontend/CreateInvocationFromCommandLine.cpp +++ b/clang/lib/Frontend/CreateInvocationFromCommandLine.cpp @@ -22,6 +22,7 @@ #include "llvm/ADT/STLExtras.h" #include "llvm/ADT/StringRef.h" #include "llvm/Option/ArgList.h" +#include "llvm/Support/VirtualFileSystem.h" #include "llvm/TargetParser/Host.h" using namespace clang; using namespace llvm::opt; @@ -32,7 +33,9 @@ clang::createInvocation(ArrayRef ArgList, assert(!ArgList.empty()); auto Diags = Opts.Diags ? std::move(Opts.Diags) - : CompilerInstance::createDiagnostics(new DiagnosticOptions); + : CompilerInstance::createDiagnostics( + Opts.VFS ? *Opts.VFS : *llvm::vfs::getRealFileSystem(), + new DiagnosticOptions); SmallVector Args(ArgList); diff --git a/clang/lib/Frontend/Rewrite/FrontendActions.cpp b/clang/lib/Frontend/Rewrite/FrontendActions.cpp index 6e1f949f543a5..5d2e1d7877095 100644 --- a/clang/lib/Frontend/Rewrite/FrontendActions.cpp +++ b/clang/lib/Frontend/Rewrite/FrontendActions.cpp @@ -247,6 +247,7 @@ class RewriteIncludesAction::RewriteImportsListener : public ASTReaderListener { Instance.setInvocation( std::make_shared(CI.getInvocation())); Instance.createDiagnostics( + CI.getVirtualFileSystem(), new ForwardingDiagnosticConsumer(CI.getDiagnosticClient()), /*ShouldOwnClient=*/true); Instance.getFrontendOpts().DisableFree = false; diff --git a/clang/lib/Interpreter/Interpreter.cpp b/clang/lib/Interpreter/Interpreter.cpp index 8eacbc6b713a1..26b174c36d3dc 100644 --- a/clang/lib/Interpreter/Interpreter.cpp +++ b/clang/lib/Interpreter/Interpreter.cpp @@ -15,6 +15,7 @@ #include "IncrementalExecutor.h" #include "IncrementalParser.h" #include "InterpreterUtils.h" +#include "llvm/Support/VirtualFileSystem.h" #ifdef __EMSCRIPTEN__ #include "Wasm.h" #endif // __EMSCRIPTEN__ @@ -104,7 +105,7 @@ CreateCI(const llvm::opt::ArgStringList &Argv) { CompilerInvocation::GetResourcesPath(Argv[0], nullptr); // Create the actual diagnostics engine. - Clang->createDiagnostics(); + Clang->createDiagnostics(*llvm::vfs::getRealFileSystem()); if (!Clang->hasDiagnostics()) return llvm::createStringError(llvm::errc::not_supported, "Initialization failed. " diff --git a/clang/lib/StaticAnalyzer/Frontend/ModelInjector.cpp b/clang/lib/StaticAnalyzer/Frontend/ModelInjector.cpp index ae11fbbe32b76..168c73df393ff 100644 --- a/clang/lib/StaticAnalyzer/Frontend/ModelInjector.cpp +++ b/clang/lib/StaticAnalyzer/Frontend/ModelInjector.cpp @@ -78,6 +78,7 @@ void ModelInjector::onBodySynthesis(const NamedDecl *D) { CompilerInstance Instance(CI.getPCHContainerOperations()); Instance.setInvocation(std::move(Invocation)); Instance.createDiagnostics( + CI.getVirtualFileSystem(), new ForwardingDiagnosticConsumer(CI.getDiagnosticClient()), /*ShouldOwnClient=*/true); diff --git a/clang/lib/Testing/TestAST.cpp b/clang/lib/Testing/TestAST.cpp index fe8b93851613d..f7348aa068c51 100644 --- a/clang/lib/Testing/TestAST.cpp +++ b/clang/lib/Testing/TestAST.cpp @@ -55,7 +55,7 @@ class StoreDiagnostics : public DiagnosticConsumer { // Provides "empty" ASTContext etc if we fail before parsing gets started. void createMissingComponents(CompilerInstance &Clang) { if (!Clang.hasDiagnostics()) - Clang.createDiagnostics(); + Clang.createDiagnostics(*llvm::vfs::getRealFileSystem()); if (!Clang.hasFileManager()) Clang.createFileManager(); if (!Clang.hasSourceManager()) @@ -82,9 +82,24 @@ TestAST::TestAST(const TestInputs &In) { auto RecoverFromEarlyExit = llvm::make_scope_exit([&] { createMissingComponents(*Clang); }); + std::string Filename = In.FileName; + if (Filename.empty()) + Filename = getFilenameForTesting(In.Language).str(); + + // Set up a VFS with only the virtual file visible. + auto VFS = llvm::makeIntrusiveRefCnt(); + if (auto Err = VFS->setCurrentWorkingDirectory(In.WorkingDir)) + ADD_FAILURE() << "Failed to setWD: " << Err.message(); + VFS->addFile(Filename, /*ModificationTime=*/0, + llvm::MemoryBuffer::getMemBufferCopy(In.Code, Filename)); + for (const auto &Extra : In.ExtraFiles) + VFS->addFile( + Extra.getKey(), /*ModificationTime=*/0, + llvm::MemoryBuffer::getMemBufferCopy(Extra.getValue(), Extra.getKey())); + // Extra error conditions are reported through diagnostics, set that up first. bool ErrorOK = In.ErrorOK || llvm::StringRef(In.Code).contains("error-ok"); - Clang->createDiagnostics(new StoreDiagnostics(Diagnostics, !ErrorOK)); + Clang->createDiagnostics(*VFS, new StoreDiagnostics(Diagnostics, !ErrorOK)); // Parse cc1 argv, (typically [-std=c++20 input.cc]) into CompilerInvocation. std::vector Argv; @@ -93,9 +108,6 @@ TestAST::TestAST(const TestInputs &In) { Argv.push_back(S.c_str()); for (const auto &S : In.ExtraArgs) Argv.push_back(S.c_str()); - std::string Filename = In.FileName; - if (Filename.empty()) - Filename = getFilenameForTesting(In.Language).str(); Argv.push_back(Filename.c_str()); Clang->setInvocation(std::make_unique()); if (!CompilerInvocation::CreateFromArgs(Clang->getInvocation(), Argv, @@ -105,16 +117,6 @@ TestAST::TestAST(const TestInputs &In) { } assert(!Clang->getInvocation().getFrontendOpts().DisableFree); - // Set up a VFS with only the virtual file visible. - auto VFS = llvm::makeIntrusiveRefCnt(); - if (auto Err = VFS->setCurrentWorkingDirectory(In.WorkingDir)) - ADD_FAILURE() << "Failed to setWD: " << Err.message(); - VFS->addFile(Filename, /*ModificationTime=*/0, - llvm::MemoryBuffer::getMemBufferCopy(In.Code, Filename)); - for (const auto &Extra : In.ExtraFiles) - VFS->addFile( - Extra.getKey(), /*ModificationTime=*/0, - llvm::MemoryBuffer::getMemBufferCopy(Extra.getValue(), Extra.getKey())); Clang->createFileManager(VFS); // Running the FrontendAction creates the other components: SourceManager, diff --git a/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp b/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp index fd1b7af0600da..5a648df05e4fd 100644 --- a/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp +++ b/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp @@ -322,7 +322,8 @@ class DependencyScanningAction : public tooling::ToolAction { // Create the compiler's actual diagnostics engine. sanitizeDiagOpts(ScanInstance.getDiagnosticOpts()); - ScanInstance.createDiagnostics(DiagConsumer, /*ShouldOwnClient=*/false); + ScanInstance.createDiagnostics(DriverFileMgr->getVirtualFileSystem(), + DiagConsumer, /*ShouldOwnClient=*/false); if (!ScanInstance.hasDiagnostics()) return false; @@ -650,7 +651,7 @@ bool DependencyScanningWorker::computeDependencies( auto DiagOpts = CreateAndPopulateDiagOpts(FinalCCommandLine); sanitizeDiagOpts(*DiagOpts); IntrusiveRefCntPtr Diags = - CompilerInstance::createDiagnostics(DiagOpts.release(), &DC, + CompilerInstance::createDiagnostics(*FinalFS, DiagOpts.release(), &DC, /*ShouldOwnClient=*/false); // Although `Diagnostics` are used only for command-line parsing, the diff --git a/clang/lib/Tooling/Tooling.cpp b/clang/lib/Tooling/Tooling.cpp index ffacf9cf1f782..88b7349ce8fed 100644 --- a/clang/lib/Tooling/Tooling.cpp +++ b/clang/lib/Tooling/Tooling.cpp @@ -387,7 +387,8 @@ bool ToolInvocation::run() { TextDiagnosticPrinter DiagnosticPrinter(llvm::errs(), DiagOpts); IntrusiveRefCntPtr Diagnostics = CompilerInstance::createDiagnostics( - &*DiagOpts, DiagConsumer ? DiagConsumer : &DiagnosticPrinter, false); + Files->getVirtualFileSystem(), &*DiagOpts, + DiagConsumer ? DiagConsumer : &DiagnosticPrinter, false); // Although `Diagnostics` are used only for command-line parsing, the custom // `DiagConsumer` might expect a `SourceManager` to be present. SourceManager SrcMgr(*Diagnostics, *Files); @@ -456,7 +457,8 @@ bool FrontendActionFactory::runInvocation( std::unique_ptr ScopedToolAction(create()); // Create the compiler's actual diagnostics engine. - Compiler.createDiagnostics(DiagConsumer, /*ShouldOwnClient=*/false); + Compiler.createDiagnostics(Files->getVirtualFileSystem(), DiagConsumer, + /*ShouldOwnClient=*/false); if (!Compiler.hasDiagnostics()) return false; @@ -652,7 +654,8 @@ class ASTBuilderAction : public ToolAction { DiagnosticConsumer *DiagConsumer) override { std::unique_ptr AST = ASTUnit::LoadFromCompilerInvocation( Invocation, std::move(PCHContainerOps), - CompilerInstance::createDiagnostics(&Invocation->getDiagnosticOpts(), + CompilerInstance::createDiagnostics(Files->getVirtualFileSystem(), + &Invocation->getDiagnosticOpts(), DiagConsumer, /*ShouldOwnClient=*/false), Files); diff --git a/clang/tools/c-index-test/core_main.cpp b/clang/tools/c-index-test/core_main.cpp index c43bff2196211..327a77a09408b 100644 --- a/clang/tools/c-index-test/core_main.cpp +++ b/clang/tools/c-index-test/core_main.cpp @@ -25,6 +25,7 @@ #include "llvm/Support/Program.h" #include "llvm/Support/Signals.h" #include "llvm/Support/StringSaver.h" +#include "llvm/Support/VirtualFileSystem.h" #include "llvm/Support/raw_ostream.h" using namespace clang; @@ -219,8 +220,9 @@ static bool printSourceSymbols(const char *Executable, SmallVector ArgsWithProgName; ArgsWithProgName.push_back(Executable); ArgsWithProgName.append(Args.begin(), Args.end()); - IntrusiveRefCntPtr - Diags(CompilerInstance::createDiagnostics(new DiagnosticOptions)); + IntrusiveRefCntPtr Diags( + CompilerInstance::createDiagnostics(*llvm::vfs::getRealFileSystem(), + new DiagnosticOptions)); CreateInvocationOptions CIOpts; CIOpts.Diags = Diags; CIOpts.ProbePrecompiled = true; // FIXME: historical default. Needed? @@ -273,7 +275,8 @@ static bool printSourceSymbolsFromModule(StringRef modulePath, auto HSOpts = std::make_shared(); IntrusiveRefCntPtr Diags = - CompilerInstance::createDiagnostics(new DiagnosticOptions()); + CompilerInstance::createDiagnostics(*llvm::vfs::getRealFileSystem(), + new DiagnosticOptions()); std::unique_ptr AU = ASTUnit::LoadFromASTFile(modulePath, *pchRdr, ASTUnit::LoadASTOnly, Diags, FileSystemOpts, HSOpts, /*LangOpts=*/nullptr, diff --git a/clang/tools/clang-import-test/clang-import-test.cpp b/clang/tools/clang-import-test/clang-import-test.cpp index 2473e16a546dc..41a8a63a2e22b 100644 --- a/clang/tools/clang-import-test/clang-import-test.cpp +++ b/clang/tools/clang-import-test/clang-import-test.cpp @@ -31,6 +31,7 @@ #include "llvm/Support/CommandLine.h" #include "llvm/Support/Error.h" #include "llvm/Support/Signals.h" +#include "llvm/Support/VirtualFileSystem.h" #include "llvm/TargetParser/Host.h" #include @@ -164,7 +165,8 @@ std::unique_ptr BuildCompilerInstance() { auto Ins = std::make_unique(); auto DC = std::make_unique(); const bool ShouldOwnClient = true; - Ins->createDiagnostics(DC.release(), ShouldOwnClient); + Ins->createDiagnostics(*llvm::vfs::getRealFileSystem(), DC.release(), + ShouldOwnClient); auto Inv = std::make_unique(); diff --git a/clang/tools/clang-installapi/ClangInstallAPI.cpp b/clang/tools/clang-installapi/ClangInstallAPI.cpp index 308e5285e3257..ce6240b1b56f1 100644 --- a/clang/tools/clang-installapi/ClangInstallAPI.cpp +++ b/clang/tools/clang-installapi/ClangInstallAPI.cpp @@ -113,7 +113,7 @@ static bool run(ArrayRef Args, const char *ProgName) { // Set up compilation. std::unique_ptr CI(new CompilerInstance()); CI->setFileManager(FM.get()); - CI->createDiagnostics(); + CI->createDiagnostics(FM->getVirtualFileSystem()); if (!CI->hasDiagnostics()) return EXIT_FAILURE; diff --git a/clang/tools/clang-scan-deps/ClangScanDeps.cpp b/clang/tools/clang-scan-deps/ClangScanDeps.cpp index 9b30799c3ab26..58b56dcfd3bec 100644 --- a/clang/tools/clang-scan-deps/ClangScanDeps.cpp +++ b/clang/tools/clang-scan-deps/ClangScanDeps.cpp @@ -29,6 +29,7 @@ #include "llvm/Support/ThreadPool.h" #include "llvm/Support/Threading.h" #include "llvm/Support/Timer.h" +#include "llvm/Support/VirtualFileSystem.h" #include "llvm/TargetParser/Host.h" #include #include @@ -424,7 +425,8 @@ class FullDeps { IntrusiveRefCntPtr DiagOpts = new DiagnosticOptions{}; TextDiagnosticPrinter DiagConsumer(ErrOS, &*DiagOpts); IntrusiveRefCntPtr Diags = - CompilerInstance::createDiagnostics(&*DiagOpts, &DiagConsumer, + CompilerInstance::createDiagnostics(*llvm::vfs::getRealFileSystem(), + &*DiagOpts, &DiagConsumer, /*ShouldOwnClient=*/false); for (auto &&M : Modules) @@ -739,7 +741,8 @@ getCompilationDatabase(int argc, char **argv, std::string &ErrorMessage) { tooling::JSONCommandLineSyntax::AutoDetect); llvm::IntrusiveRefCntPtr Diags = - CompilerInstance::createDiagnostics(new DiagnosticOptions); + CompilerInstance::createDiagnostics(*llvm::vfs::getRealFileSystem(), + new DiagnosticOptions); driver::Driver TheDriver(CommandLine[0], llvm::sys::getDefaultTargetTriple(), *Diags); TheDriver.setCheckInputsExist(false); diff --git a/clang/tools/diagtool/ShowEnabledWarnings.cpp b/clang/tools/diagtool/ShowEnabledWarnings.cpp index 66a295db054c3..48bed7c828c16 100644 --- a/clang/tools/diagtool/ShowEnabledWarnings.cpp +++ b/clang/tools/diagtool/ShowEnabledWarnings.cpp @@ -14,6 +14,7 @@ #include "clang/Frontend/TextDiagnosticPrinter.h" #include "clang/Frontend/Utils.h" #include "llvm/Support/TargetSelect.h" +#include "llvm/Support/VirtualFileSystem.h" DEF_DIAGTOOL("show-enabled", "Show which warnings are enabled for a given command line", @@ -74,7 +75,8 @@ createDiagnostics(unsigned int argc, char **argv) { // Build the diagnostics parser IntrusiveRefCntPtr FinalDiags = - CompilerInstance::createDiagnostics(&Invocation->getDiagnosticOpts()); + CompilerInstance::createDiagnostics(*llvm::vfs::getRealFileSystem(), + &Invocation->getDiagnosticOpts()); if (!FinalDiags) return nullptr; diff --git a/clang/tools/driver/cc1_main.cpp b/clang/tools/driver/cc1_main.cpp index 554dc956c7cfe..d14058ff2c723 100644 --- a/clang/tools/driver/cc1_main.cpp +++ b/clang/tools/driver/cc1_main.cpp @@ -45,6 +45,7 @@ #include "llvm/Support/TargetSelect.h" #include "llvm/Support/TimeProfiler.h" #include "llvm/Support/Timer.h" +#include "llvm/Support/VirtualFileSystem.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Target/TargetMachine.h" #include "llvm/TargetParser/AArch64TargetParser.h" @@ -264,7 +265,7 @@ int cc1_main(ArrayRef Argv, const char *Argv0, void *MainAddr) { CompilerInvocation::GetResourcesPath(Argv0, MainAddr); // Create the actual diagnostics engine. - Clang->createDiagnostics(); + Clang->createDiagnostics(*llvm::vfs::getRealFileSystem()); if (!Clang->hasDiagnostics()) return 1; diff --git a/clang/tools/libclang/CIndex.cpp b/clang/tools/libclang/CIndex.cpp index 5475f7143db99..002e292ea3251 100644 --- a/clang/tools/libclang/CIndex.cpp +++ b/clang/tools/libclang/CIndex.cpp @@ -59,6 +59,7 @@ #include "llvm/Support/TargetSelect.h" #include "llvm/Support/Threading.h" #include "llvm/Support/Timer.h" +#include "llvm/Support/VirtualFileSystem.h" #include "llvm/Support/raw_ostream.h" #include "llvm/Support/thread.h" #include @@ -4084,7 +4085,8 @@ enum CXErrorCode clang_createTranslationUnit2(CXIndex CIdx, auto HSOpts = std::make_shared(); IntrusiveRefCntPtr Diags = - CompilerInstance::createDiagnostics(new DiagnosticOptions()); + CompilerInstance::createDiagnostics(*llvm::vfs::getRealFileSystem(), + new DiagnosticOptions()); std::unique_ptr AU = ASTUnit::LoadFromASTFile( ast_filename, CXXIdx->getPCHContainerOperations()->getRawReader(), ASTUnit::LoadEverything, Diags, FileSystemOpts, HSOpts, @@ -4157,7 +4159,8 @@ clang_parseTranslationUnit_Impl(CXIndex CIdx, const char *source_filename, std::unique_ptr DiagOpts = CreateAndPopulateDiagOpts( llvm::ArrayRef(command_line_args, num_command_line_args)); IntrusiveRefCntPtr Diags( - CompilerInstance::createDiagnostics(DiagOpts.release())); + CompilerInstance::createDiagnostics(*llvm::vfs::getRealFileSystem(), + DiagOpts.release())); if (options & CXTranslationUnit_KeepGoing) Diags->setFatalsAsError(true); diff --git a/clang/tools/libclang/Indexing.cpp b/clang/tools/libclang/Indexing.cpp index 05d88452209fb..b890921972a0a 100644 --- a/clang/tools/libclang/Indexing.cpp +++ b/clang/tools/libclang/Indexing.cpp @@ -29,6 +29,7 @@ #include "clang/Lex/PreprocessorOptions.h" #include "llvm/Support/CrashRecoveryContext.h" #include "llvm/Support/MemoryBuffer.h" +#include "llvm/Support/VirtualFileSystem.h" #include #include #include @@ -479,10 +480,10 @@ static CXErrorCode clang_indexSourceFile_Impl( CaptureDiag = new CaptureDiagnosticConsumer(); // Configure the diagnostics. - IntrusiveRefCntPtr - Diags(CompilerInstance::createDiagnostics(new DiagnosticOptions, - CaptureDiag, - /*ShouldOwnClient=*/true)); + IntrusiveRefCntPtr Diags( + CompilerInstance::createDiagnostics(*llvm::vfs::getRealFileSystem(), + new DiagnosticOptions, CaptureDiag, + /*ShouldOwnClient=*/true)); // Recover resources if we crash before exiting this function. llvm::CrashRecoveryContextCleanupRegistrar(); Invocation->getPreprocessorOpts().addRemappedFile( diff --git a/clang/unittests/CodeGen/TestCompiler.h b/clang/unittests/CodeGen/TestCompiler.h index 891489cb511a4..931c75effbf75 100644 --- a/clang/unittests/CodeGen/TestCompiler.h +++ b/clang/unittests/CodeGen/TestCompiler.h @@ -20,6 +20,7 @@ #include "llvm/IR/Constants.h" #include "llvm/IR/LLVMContext.h" #include "llvm/IR/Module.h" +#include "llvm/Support/VirtualFileSystem.h" #include "llvm/TargetParser/Host.h" namespace llvm { @@ -35,7 +36,7 @@ struct TestCompiler { clang::CodeGenOptions CGO = clang::CodeGenOptions()) { compiler.getLangOpts() = LO; compiler.getCodeGenOpts() = CGO; - compiler.createDiagnostics(); + compiler.createDiagnostics(*llvm::vfs::getRealFileSystem()); std::string TrStr = llvm::Triple::normalize(llvm::sys::getProcessTriple()); llvm::Triple Tr(TrStr); diff --git a/clang/unittests/Driver/DXCModeTest.cpp b/clang/unittests/Driver/DXCModeTest.cpp index 2a079a62f1bc1..616c07c0d389d 100644 --- a/clang/unittests/Driver/DXCModeTest.cpp +++ b/clang/unittests/Driver/DXCModeTest.cpp @@ -219,7 +219,8 @@ TEST(DxcModeTest, DefaultEntry) { const char *Args[] = {"clang", "--driver-mode=dxc", "-Tcs_6_7", "foo.hlsl"}; IntrusiveRefCntPtr Diags = - CompilerInstance::createDiagnostics(new DiagnosticOptions()); + CompilerInstance::createDiagnostics(*InMemoryFileSystem, + new DiagnosticOptions()); CreateInvocationOptions CIOpts; CIOpts.Diags = Diags; diff --git a/clang/unittests/Driver/ToolChainTest.cpp b/clang/unittests/Driver/ToolChainTest.cpp index 8542a168f93c2..0787e7d2d3339 100644 --- a/clang/unittests/Driver/ToolChainTest.cpp +++ b/clang/unittests/Driver/ToolChainTest.cpp @@ -577,7 +577,7 @@ TEST(CompilerInvocation, SplitSwarfSingleCrash) { TEST(ToolChainTest, UEFICallingConventionTest) { clang::CompilerInstance compiler; - compiler.createDiagnostics(); + compiler.createDiagnostics(*llvm::vfs::getRealFileSystem()); std::string TrStr = "x86_64-unknown-uefi"; llvm::Triple Tr(TrStr); diff --git a/clang/unittests/Frontend/ASTUnitTest.cpp b/clang/unittests/Frontend/ASTUnitTest.cpp index bd5d5d0098180..e6524a019871d 100644 --- a/clang/unittests/Frontend/ASTUnitTest.cpp +++ b/clang/unittests/Frontend/ASTUnitTest.cpp @@ -17,6 +17,7 @@ #include "llvm/Support/FileSystem.h" #include "llvm/Support/Path.h" #include "llvm/Support/ToolOutputFile.h" +#include "llvm/Support/VirtualFileSystem.h" #include "gtest/gtest.h" using namespace llvm; @@ -41,17 +42,18 @@ class ASTUnitTest : public ::testing::Test { const char *Args[] = {"clang", "-xc++", InputFileName.c_str()}; - Diags = CompilerInstance::createDiagnostics(new DiagnosticOptions()); + auto VFS = llvm::vfs::getRealFileSystem(); + Diags = CompilerInstance::createDiagnostics(*VFS, new DiagnosticOptions()); CreateInvocationOptions CIOpts; CIOpts.Diags = Diags; + CIOpts.VFS = VFS; CInvok = createInvocation(Args, std::move(CIOpts)); if (!CInvok) return nullptr; - FileManager *FileMgr = - new FileManager(FileSystemOptions(), vfs::getRealFileSystem()); + FileManager *FileMgr = new FileManager(FileSystemOptions(), VFS); PCHContainerOps = std::make_shared(); return ASTUnit::LoadFromCompilerInvocation( @@ -134,7 +136,8 @@ TEST_F(ASTUnitTest, ModuleTextualHeader) { const char *Args[] = {"clang", "test.cpp", "-fmodule-map-file=m.modulemap", "-fmodule-name=M"}; - Diags = CompilerInstance::createDiagnostics(new DiagnosticOptions()); + Diags = + CompilerInstance::createDiagnostics(*InMemoryFs, new DiagnosticOptions()); CreateInvocationOptions CIOpts; CIOpts.Diags = Diags; CInvok = createInvocation(Args, std::move(CIOpts)); @@ -162,7 +165,8 @@ TEST_F(ASTUnitTest, LoadFromCommandLineEarlyError) { const char *Args[] = {"clang", "-target", "foobar", InputFileName.c_str()}; - auto Diags = CompilerInstance::createDiagnostics(new DiagnosticOptions()); + auto Diags = CompilerInstance::createDiagnostics( + *llvm::vfs::getRealFileSystem(), new DiagnosticOptions()); auto PCHContainerOps = std::make_shared(); std::unique_ptr ErrUnit; @@ -189,7 +193,8 @@ TEST_F(ASTUnitTest, LoadFromCommandLineWorkingDirectory) { const char *Args[] = {"clang", "-working-directory", WorkingDir.c_str(), InputFileName.c_str()}; - auto Diags = CompilerInstance::createDiagnostics(new DiagnosticOptions()); + auto Diags = CompilerInstance::createDiagnostics( + *llvm::vfs::getRealFileSystem(), new DiagnosticOptions()); auto PCHContainerOps = std::make_shared(); std::unique_ptr ErrUnit; diff --git a/clang/unittests/Frontend/CodeGenActionTest.cpp b/clang/unittests/Frontend/CodeGenActionTest.cpp index a6520910c8399..d855302ed0542 100644 --- a/clang/unittests/Frontend/CodeGenActionTest.cpp +++ b/clang/unittests/Frontend/CodeGenActionTest.cpp @@ -16,6 +16,7 @@ #include "clang/Frontend/CompilerInstance.h" #include "clang/Lex/PreprocessorOptions.h" #include "llvm/Support/FormatVariadic.h" +#include "llvm/Support/VirtualFileSystem.h" #include "gtest/gtest.h" using namespace llvm; @@ -52,7 +53,7 @@ TEST(CodeGenTest, TestNullCodeGen) { Invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; CompilerInstance Compiler; Compiler.setInvocation(std::move(Invocation)); - Compiler.createDiagnostics(); + Compiler.createDiagnostics(*llvm::vfs::getRealFileSystem()); EXPECT_TRUE(Compiler.hasDiagnostics()); std::unique_ptr Act(new NullCodeGenAction); @@ -70,7 +71,7 @@ TEST(CodeGenTest, CodeGenFromIRMemBuffer) { Invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; CompilerInstance Compiler; Compiler.setInvocation(std::move(Invocation)); - Compiler.createDiagnostics(); + Compiler.createDiagnostics(*llvm::vfs::getRealFileSystem()); EXPECT_TRUE(Compiler.hasDiagnostics()); EmitLLVMOnlyAction Action; @@ -101,7 +102,7 @@ TEST(CodeGenTest, DebugInfoCWDCodeGen) { SmallString<256> IRBuffer; Compiler.setOutputStream(std::make_unique(IRBuffer)); Compiler.setInvocation(std::move(Invocation)); - Compiler.createDiagnostics(); + Compiler.createDiagnostics(*VFS); Compiler.createFileManager(std::move(VFS)); EmitLLVMAction Action; diff --git a/clang/unittests/Frontend/CompilerInstanceTest.cpp b/clang/unittests/Frontend/CompilerInstanceTest.cpp index 5cf548e913cc1..07329eb299e29 100644 --- a/clang/unittests/Frontend/CompilerInstanceTest.cpp +++ b/clang/unittests/Frontend/CompilerInstanceTest.cpp @@ -13,6 +13,7 @@ #include "llvm/Support/FileSystem.h" #include "llvm/Support/Format.h" #include "llvm/Support/ToolOutputFile.h" +#include "llvm/Support/VirtualFileSystem.h" #include "gtest/gtest.h" using namespace llvm; @@ -53,7 +54,8 @@ TEST(CompilerInstance, DefaultVFSOverlayFromInvocation) { const char *Args[] = {"clang", VFSArg.c_str(), "-xc++", "-"}; IntrusiveRefCntPtr Diags = - CompilerInstance::createDiagnostics(new DiagnosticOptions()); + CompilerInstance::createDiagnostics(*llvm::vfs::getRealFileSystem(), + new DiagnosticOptions()); CreateInvocationOptions CIOpts; CIOpts.Diags = Diags; @@ -87,8 +89,9 @@ TEST(CompilerInstance, AllowDiagnosticLogWithUnownedDiagnosticConsumer) { auto DiagPrinter = std::make_unique( DiagnosticsOS, new DiagnosticOptions()); CompilerInstance Instance; - IntrusiveRefCntPtr Diags = Instance.createDiagnostics( - DiagOpts, DiagPrinter.get(), /*ShouldOwnClient=*/false); + IntrusiveRefCntPtr Diags = + Instance.createDiagnostics(*llvm::vfs::getRealFileSystem(), DiagOpts, + DiagPrinter.get(), /*ShouldOwnClient=*/false); Diags->Report(diag::err_expected) << "no crash"; ASSERT_EQ(DiagnosticOutput, "error: expected no crash\n"); diff --git a/clang/unittests/Frontend/CompilerInvocationTest.cpp b/clang/unittests/Frontend/CompilerInvocationTest.cpp index 45478de5e6f7c..4ff6824f1e21e 100644 --- a/clang/unittests/Frontend/CompilerInvocationTest.cpp +++ b/clang/unittests/Frontend/CompilerInvocationTest.cpp @@ -12,6 +12,7 @@ #include "clang/Frontend/TextDiagnosticBuffer.h" #include "clang/Lex/PreprocessorOptions.h" #include "clang/Serialization/ModuleFileExtension.h" +#include "llvm/Support/VirtualFileSystem.h" #include "llvm/TargetParser/Host.h" #include "gmock/gmock.h" @@ -38,9 +39,9 @@ class CommandLineTest : public ::testing::Test { } CommandLineTest() - : Diags(CompilerInstance::createDiagnostics(new DiagnosticOptions(), - new TextDiagnosticBuffer())) { - } + : Diags(CompilerInstance::createDiagnostics( + *llvm::vfs::getRealFileSystem(), new DiagnosticOptions(), + new TextDiagnosticBuffer())) {} }; template diff --git a/clang/unittests/Frontend/FrontendActionTest.cpp b/clang/unittests/Frontend/FrontendActionTest.cpp index 818e8cef27e51..099d6d66c874e 100644 --- a/clang/unittests/Frontend/FrontendActionTest.cpp +++ b/clang/unittests/Frontend/FrontendActionTest.cpp @@ -20,6 +20,7 @@ #include "clang/Serialization/InMemoryModuleCache.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/ToolOutputFile.h" +#include "llvm/Support/VirtualFileSystem.h" #include "llvm/TargetParser/Triple.h" #include "gtest/gtest.h" @@ -90,7 +91,7 @@ TEST(ASTFrontendAction, Sanity) { invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; CompilerInstance compiler; compiler.setInvocation(std::move(invocation)); - compiler.createDiagnostics(); + compiler.createDiagnostics(*llvm::vfs::getRealFileSystem()); TestASTFrontendAction test_action; ASSERT_TRUE(compiler.ExecuteAction(test_action)); @@ -110,7 +111,7 @@ TEST(ASTFrontendAction, IncrementalParsing) { invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; CompilerInstance compiler; compiler.setInvocation(std::move(invocation)); - compiler.createDiagnostics(); + compiler.createDiagnostics(*llvm::vfs::getRealFileSystem()); TestASTFrontendAction test_action(/*enableIncrementalProcessing=*/true); ASSERT_TRUE(compiler.ExecuteAction(test_action)); @@ -137,7 +138,7 @@ TEST(ASTFrontendAction, LateTemplateIncrementalParsing) { invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; CompilerInstance compiler; compiler.setInvocation(std::move(invocation)); - compiler.createDiagnostics(); + compiler.createDiagnostics(*llvm::vfs::getRealFileSystem()); TestASTFrontendAction test_action(/*enableIncrementalProcessing=*/true, /*actOnEndOfTranslationUnit=*/true); @@ -183,7 +184,7 @@ TEST(PreprocessorFrontendAction, EndSourceFile) { Invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; CompilerInstance Compiler; Compiler.setInvocation(std::move(Invocation)); - Compiler.createDiagnostics(); + Compiler.createDiagnostics(*llvm::vfs::getRealFileSystem()); TestPPCallbacks *Callbacks = new TestPPCallbacks; TestPPCallbacksFrontendAction TestAction(Callbacks); @@ -245,7 +246,8 @@ TEST(ASTFrontendAction, ExternalSemaSource) { CompilerInstance Compiler; Compiler.setInvocation(std::move(Invocation)); auto *TDC = new TypoDiagnosticConsumer; - Compiler.createDiagnostics(TDC, /*ShouldOwnClient=*/true); + Compiler.createDiagnostics(*llvm::vfs::getRealFileSystem(), TDC, + /*ShouldOwnClient=*/true); Compiler.setExternalSemaSource(new TypoExternalSemaSource(Compiler)); SyntaxOnlyAction TestAction; @@ -277,7 +279,7 @@ TEST(GeneratePCHFrontendAction, CacheGeneratedPCH) { Invocation->getTargetOpts().Triple = "x86_64-apple-darwin19.0.0"; CompilerInstance Compiler; Compiler.setInvocation(std::move(Invocation)); - Compiler.createDiagnostics(); + Compiler.createDiagnostics(*llvm::vfs::getRealFileSystem()); GeneratePCHAction TestAction; ASSERT_TRUE(Compiler.ExecuteAction(TestAction)); diff --git a/clang/unittests/Frontend/OutputStreamTest.cpp b/clang/unittests/Frontend/OutputStreamTest.cpp index 2618558c7e11e..fa5d726d25290 100644 --- a/clang/unittests/Frontend/OutputStreamTest.cpp +++ b/clang/unittests/Frontend/OutputStreamTest.cpp @@ -13,6 +13,7 @@ #include "clang/Frontend/TextDiagnosticPrinter.h" #include "clang/FrontendTool/Utils.h" #include "clang/Lex/PreprocessorOptions.h" +#include "llvm/Support/VirtualFileSystem.h" #include "gtest/gtest.h" using namespace llvm; @@ -37,7 +38,7 @@ TEST(FrontendOutputTests, TestOutputStream) { Compiler.setOutputStream(std::move(IRStream)); Compiler.setInvocation(std::move(Invocation)); - Compiler.createDiagnostics(); + Compiler.createDiagnostics(*llvm::vfs::getRealFileSystem()); bool Success = ExecuteCompilerInvocation(&Compiler); EXPECT_TRUE(Success); @@ -62,6 +63,7 @@ TEST(FrontendOutputTests, TestVerboseOutputStreamShared) { Compiler.setInvocation(std::move(Invocation)); IntrusiveRefCntPtr DiagOpts = new DiagnosticOptions(); Compiler.createDiagnostics( + *llvm::vfs::getRealFileSystem(), new TextDiagnosticPrinter(llvm::nulls(), &*DiagOpts), true); Compiler.setVerboseOutputStream(VerboseStream); @@ -91,6 +93,7 @@ TEST(FrontendOutputTests, TestVerboseOutputStreamOwned) { Compiler.setInvocation(std::move(Invocation)); IntrusiveRefCntPtr DiagOpts = new DiagnosticOptions(); Compiler.createDiagnostics( + *llvm::vfs::getRealFileSystem(), new TextDiagnosticPrinter(llvm::nulls(), &*DiagOpts), true); Compiler.setVerboseOutputStream(std::move(VerboseStream)); diff --git a/clang/unittests/Frontend/PCHPreambleTest.cpp b/clang/unittests/Frontend/PCHPreambleTest.cpp index 2ce24c91ac0f1..58ec2e2ce7058 100644 --- a/clang/unittests/Frontend/PCHPreambleTest.cpp +++ b/clang/unittests/Frontend/PCHPreambleTest.cpp @@ -94,8 +94,9 @@ class PCHPreambleTest : public ::testing::Test { PreprocessorOptions &PPOpts = CI->getPreprocessorOpts(); PPOpts.RemappedFilesKeepOriginalName = true; - IntrusiveRefCntPtr - Diags(CompilerInstance::createDiagnostics(new DiagnosticOptions, new DiagnosticConsumer)); + IntrusiveRefCntPtr Diags( + CompilerInstance::createDiagnostics(*VFS, new DiagnosticOptions, + new DiagnosticConsumer)); FileManager *FileMgr = new FileManager(FSOpts, VFS); diff --git a/clang/unittests/Frontend/ReparseWorkingDirTest.cpp b/clang/unittests/Frontend/ReparseWorkingDirTest.cpp index ca7ce23dd64b2..b0f2d51b80b9e 100644 --- a/clang/unittests/Frontend/ReparseWorkingDirTest.cpp +++ b/clang/unittests/Frontend/ReparseWorkingDirTest.cpp @@ -58,7 +58,7 @@ class ReparseWorkingDirTest : public ::testing::Test { CI->getTargetOpts().Triple = "i386-unknown-linux-gnu"; IntrusiveRefCntPtr Diags( - CompilerInstance::createDiagnostics(new DiagnosticOptions, + CompilerInstance::createDiagnostics(*VFS, new DiagnosticOptions, new DiagnosticConsumer)); FileManager *FileMgr = new FileManager(CI->getFileSystemOpts(), VFS); diff --git a/clang/unittests/Frontend/UtilsTest.cpp b/clang/unittests/Frontend/UtilsTest.cpp index ae014d3f86b5a..304fbe2a8e69f 100644 --- a/clang/unittests/Frontend/UtilsTest.cpp +++ b/clang/unittests/Frontend/UtilsTest.cpp @@ -28,9 +28,9 @@ TEST(BuildCompilerInvocationTest, RecoverMultipleJobs) { clang::IgnoringDiagConsumer D; CreateInvocationOptions Opts; Opts.RecoverOnError = true; - Opts.Diags = clang::CompilerInstance::createDiagnostics(new DiagnosticOptions, - &D, false); Opts.VFS = new llvm::vfs::InMemoryFileSystem(); + Opts.Diags = clang::CompilerInstance::createDiagnostics( + *Opts.VFS, new DiagnosticOptions, &D, false); std::unique_ptr CI = createInvocation(Args, Opts); ASSERT_TRUE(CI); EXPECT_THAT(CI->TargetOpts->Triple, testing::StartsWith("i386-")); @@ -46,7 +46,7 @@ TEST(BuildCompilerInvocationTest, ProbePrecompiled) { clang::IgnoringDiagConsumer D; llvm::IntrusiveRefCntPtr CommandLineDiagsEngine = - clang::CompilerInstance::createDiagnostics(new DiagnosticOptions, &D, + clang::CompilerInstance::createDiagnostics(*FS, new DiagnosticOptions, &D, false); // Default: ProbePrecompiled=false CreateInvocationOptions CIOpts; diff --git a/clang/unittests/Sema/SemaNoloadLookupTest.cpp b/clang/unittests/Sema/SemaNoloadLookupTest.cpp index cf89c7331e4e0..a8e1bb0bd2c5d 100644 --- a/clang/unittests/Sema/SemaNoloadLookupTest.cpp +++ b/clang/unittests/Sema/SemaNoloadLookupTest.cpp @@ -57,11 +57,12 @@ class NoloadLookupTest : public ::testing::Test { std::string FileName = llvm::Twine(ModuleName + ".cppm").str(); addFile(FileName, Contents); - IntrusiveRefCntPtr Diags = - CompilerInstance::createDiagnostics(new DiagnosticOptions()); CreateInvocationOptions CIOpts; + CIOpts.VFS = llvm::vfs::getRealFileSystem(); + IntrusiveRefCntPtr Diags = + CompilerInstance::createDiagnostics(*CIOpts.VFS, + new DiagnosticOptions()); CIOpts.Diags = Diags; - CIOpts.VFS = llvm::vfs::createPhysicalFileSystem(); std::string CacheBMIPath = llvm::Twine(TestDir + "/" + ModuleName + ".pcm").str(); diff --git a/clang/unittests/Serialization/ForceCheckFileInputTest.cpp b/clang/unittests/Serialization/ForceCheckFileInputTest.cpp index ad8892b8c8be1..6a839d1bf9350 100644 --- a/clang/unittests/Serialization/ForceCheckFileInputTest.cpp +++ b/clang/unittests/Serialization/ForceCheckFileInputTest.cpp @@ -63,12 +63,14 @@ export int aa = 43; std::string BMIPath = llvm::Twine(TestDir + "/a.pcm").str(); { - IntrusiveRefCntPtr Diags = - CompilerInstance::createDiagnostics(new DiagnosticOptions()); CreateInvocationOptions CIOpts; - CIOpts.Diags = Diags; CIOpts.VFS = llvm::vfs::createPhysicalFileSystem(); + IntrusiveRefCntPtr Diags = + CompilerInstance::createDiagnostics(*CIOpts.VFS, + new DiagnosticOptions()); + CIOpts.Diags = Diags; + const char *Args[] = {"clang++", "-std=c++20", "--precompile", "-working-directory", TestDir.c_str(), "a.cppm"}; @@ -103,11 +105,12 @@ export int aa = 43; } { - IntrusiveRefCntPtr Diags = - CompilerInstance::createDiagnostics(new DiagnosticOptions()); CreateInvocationOptions CIOpts; - CIOpts.Diags = Diags; CIOpts.VFS = llvm::vfs::createPhysicalFileSystem(); + IntrusiveRefCntPtr Diags = + CompilerInstance::createDiagnostics(*CIOpts.VFS, + new DiagnosticOptions()); + CIOpts.Diags = Diags; std::string BMIPath = llvm::Twine(TestDir + "/a.pcm").str(); const char *Args[] = { diff --git a/clang/unittests/Serialization/ModuleCacheTest.cpp b/clang/unittests/Serialization/ModuleCacheTest.cpp index a7ca98549b412..6ceee1c6536cb 100644 --- a/clang/unittests/Serialization/ModuleCacheTest.cpp +++ b/clang/unittests/Serialization/ModuleCacheTest.cpp @@ -106,11 +106,11 @@ TEST_F(ModuleCacheTest, CachedModuleNewPath) { SmallString<256> MCPArg("-fmodules-cache-path="); MCPArg.append(ModuleCachePath); - IntrusiveRefCntPtr Diags = - CompilerInstance::createDiagnostics(new DiagnosticOptions()); CreateInvocationOptions CIOpts; - CIOpts.Diags = Diags; CIOpts.VFS = llvm::vfs::createPhysicalFileSystem(); + IntrusiveRefCntPtr Diags = + CompilerInstance::createDiagnostics(*CIOpts.VFS, new DiagnosticOptions()); + CIOpts.Diags = Diags; // First run should pass with no errors const char *Args[] = {"clang", "-fmodules", "-Fframeworks", @@ -156,11 +156,11 @@ TEST_F(ModuleCacheTest, CachedModuleNewPathAllowErrors) { SmallString<256> MCPArg("-fmodules-cache-path="); MCPArg.append(ModuleCachePath); - IntrusiveRefCntPtr Diags = - CompilerInstance::createDiagnostics(new DiagnosticOptions()); CreateInvocationOptions CIOpts; - CIOpts.Diags = Diags; CIOpts.VFS = llvm::vfs::createPhysicalFileSystem(); + IntrusiveRefCntPtr Diags = + CompilerInstance::createDiagnostics(*CIOpts.VFS, new DiagnosticOptions()); + CIOpts.Diags = Diags; // First run should pass with no errors const char *Args[] = {"clang", "-fmodules", "-Fframeworks", diff --git a/clang/unittests/Serialization/NoCommentsTest.cpp b/clang/unittests/Serialization/NoCommentsTest.cpp index a0a564aeff9a1..a1fb23404e415 100644 --- a/clang/unittests/Serialization/NoCommentsTest.cpp +++ b/clang/unittests/Serialization/NoCommentsTest.cpp @@ -83,11 +83,11 @@ export module Comments; void foo() {} )cpp"); - IntrusiveRefCntPtr Diags = - CompilerInstance::createDiagnostics(new DiagnosticOptions()); CreateInvocationOptions CIOpts; - CIOpts.Diags = Diags; CIOpts.VFS = llvm::vfs::createPhysicalFileSystem(); + IntrusiveRefCntPtr Diags = + CompilerInstance::createDiagnostics(*CIOpts.VFS, new DiagnosticOptions()); + CIOpts.Diags = Diags; std::string CacheBMIPath = llvm::Twine(TestDir + "/Comments.pcm").str(); const char *Args[] = {"clang++", "-std=c++20", diff --git a/clang/unittests/Serialization/PreambleInNamedModulesTest.cpp b/clang/unittests/Serialization/PreambleInNamedModulesTest.cpp index d26e1cb633654..cf317eddb0f37 100644 --- a/clang/unittests/Serialization/PreambleInNamedModulesTest.cpp +++ b/clang/unittests/Serialization/PreambleInNamedModulesTest.cpp @@ -75,10 +75,10 @@ export using ::E; )cpp", MainFilePath); - IntrusiveRefCntPtr Diags = - CompilerInstance::createDiagnostics(new DiagnosticOptions()); IntrusiveRefCntPtr VFS = llvm::vfs::createPhysicalFileSystem(); + IntrusiveRefCntPtr Diags = + CompilerInstance::createDiagnostics(*VFS, new DiagnosticOptions()); CreateInvocationOptions CIOpts; CIOpts.Diags = Diags; diff --git a/clang/unittests/Serialization/VarDeclConstantInitTest.cpp b/clang/unittests/Serialization/VarDeclConstantInitTest.cpp index 5cbbfb9ff003b..14c0c30add207 100644 --- a/clang/unittests/Serialization/VarDeclConstantInitTest.cpp +++ b/clang/unittests/Serialization/VarDeclConstantInitTest.cpp @@ -90,11 +90,11 @@ export namespace Fibonacci } )cpp"); - IntrusiveRefCntPtr Diags = - CompilerInstance::createDiagnostics(new DiagnosticOptions()); CreateInvocationOptions CIOpts; - CIOpts.Diags = Diags; CIOpts.VFS = llvm::vfs::createPhysicalFileSystem(); + IntrusiveRefCntPtr Diags = + CompilerInstance::createDiagnostics(*CIOpts.VFS, new DiagnosticOptions()); + CIOpts.Diags = Diags; const char *Args[] = {"clang++", "-std=c++20", "--precompile", "-working-directory", diff --git a/clang/unittests/Support/TimeProfilerTest.cpp b/clang/unittests/Support/TimeProfilerTest.cpp index 339b470153e64..995ebf625b7ab 100644 --- a/clang/unittests/Support/TimeProfilerTest.cpp +++ b/clang/unittests/Support/TimeProfilerTest.cpp @@ -45,8 +45,6 @@ std::string teardownProfiler() { // We only parse AST here. This is enough for constexpr evaluation. bool compileFromString(StringRef Code, StringRef Standard, StringRef File, llvm::StringMap Headers = {}) { - CompilerInstance Compiler; - Compiler.createDiagnostics(); llvm::IntrusiveRefCntPtr FS( new llvm::vfs::InMemoryFileSystem()); @@ -57,6 +55,8 @@ bool compileFromString(StringRef Code, StringRef Standard, StringRef File, } llvm::IntrusiveRefCntPtr Files( new FileManager(FileSystemOptions(), FS)); + CompilerInstance Compiler; + Compiler.createDiagnostics(Files->getVirtualFileSystem()); Compiler.setFileManager(Files.get()); auto Invocation = std::make_shared(); diff --git a/clang/unittests/Tooling/DependencyScanning/DependencyScannerTest.cpp b/clang/unittests/Tooling/DependencyScanning/DependencyScannerTest.cpp index ec0e143be4a20..e1c4770805992 100644 --- a/clang/unittests/Tooling/DependencyScanning/DependencyScannerTest.cpp +++ b/clang/unittests/Tooling/DependencyScanning/DependencyScannerTest.cpp @@ -60,7 +60,8 @@ class TestDependencyScanningAction : public tooling::ToolAction { Compiler.setInvocation(std::move(Invocation)); Compiler.setFileManager(FileMgr); - Compiler.createDiagnostics(DiagConsumer, /*ShouldOwnClient=*/false); + Compiler.createDiagnostics(FileMgr->getVirtualFileSystem(), DiagConsumer, + /*ShouldOwnClient=*/false); if (!Compiler.hasDiagnostics()) return false; diff --git a/clang/unittests/Tooling/ToolingTest.cpp b/clang/unittests/Tooling/ToolingTest.cpp index f41a44fa0922a..0b65577a05193 100644 --- a/clang/unittests/Tooling/ToolingTest.cpp +++ b/clang/unittests/Tooling/ToolingTest.cpp @@ -384,7 +384,8 @@ struct CommandLineExtractorTest : public ::testing::Test { public: CommandLineExtractorTest() : InMemoryFS(new llvm::vfs::InMemoryFileSystem), - Diags(CompilerInstance::createDiagnostics(new DiagnosticOptions)), + Diags(CompilerInstance::createDiagnostics(*InMemoryFS, + new DiagnosticOptions)), Driver("clang", llvm::sys::getDefaultTargetTriple(), *Diags, "clang LLVM compiler", overlayRealFS(InMemoryFS)) {}