https://github.com/jansvoboda11 created https://github.com/llvm/llvm-project/pull/137668
This PR makes it so that `CompilerInvocation` needs to be provided to `CompilerInstance` on construction. There are a couple of benefits in my view: * Making it impossible to mis-use some `CompilerInstance` APIs. For example there are cases, where `createDiagnostics()` was called before `setInvocation()`, causing the `DiagnosticEngine` to use the default-constructed `DiagnosticOptions` instead of the intended ones. * This shrinks `CompilerInstance`'s state space. * This makes it possible to access **the** invocation in `CompilerInstance`'s constructor (to be used in a follow-up). >From 7b45d9071b24f72bfa4bbbf75313470a67a70f95 Mon Sep 17 00:00:00 2001 From: Jan Svoboda <jan_svob...@apple.com> Date: Mon, 21 Apr 2025 11:55:43 -0700 Subject: [PATCH] [clang][frontend] Require invocation for `CompilerInstance` construction --- .../clang-include-fixer/IncludeFixer.cpp | 3 +-- clang-tools-extra/clangd/Compiler.cpp | 4 +--- .../include-cleaner/unittests/RecordTest.cpp | 14 +++++++------- .../include/clang/Frontend/CompilerInstance.h | 12 +++--------- clang/lib/Frontend/ASTUnit.cpp | 19 +++++++------------ clang/lib/Frontend/ChainedIncludesSource.cpp | 5 ++--- clang/lib/Frontend/CompilerInstance.cpp | 17 +++++++---------- clang/lib/Frontend/PrecompiledPreamble.cpp | 5 ++--- .../lib/Frontend/Rewrite/FrontendActions.cpp | 5 ++--- .../StaticAnalyzer/Frontend/ModelInjector.cpp | 4 ++-- clang/lib/Testing/TestAST.cpp | 4 +--- .../DependencyScanningWorker.cpp | 4 ++-- clang/lib/Tooling/Tooling.cpp | 3 +-- .../clang-import-test/clang-import-test.cpp | 15 +++++++++------ clang/tools/driver/cc1_main.cpp | 9 ++++++--- clang/unittests/AST/ExternalASTSourceTest.cpp | 13 ++++++++----- .../unittests/Frontend/CodeGenActionTest.cpp | 9 +++------ .../Frontend/CompilerInstanceTest.cpp | 3 +-- .../unittests/Frontend/FrontendActionTest.cpp | 18 ++++++------------ clang/unittests/Frontend/OutputStreamTest.cpp | 9 +++------ clang/unittests/Sema/SemaNoloadLookupTest.cpp | 3 +-- .../Serialization/ForceCheckFileInputTest.cpp | 6 ++---- .../Serialization/LoadSpecLazilyTest.cpp | 3 +-- .../Serialization/ModuleCacheTest.cpp | 14 ++++++-------- .../Serialization/NoCommentsTest.cpp | 3 +-- .../PreambleInNamedModulesTest.cpp | 4 +--- .../Serialization/VarDeclConstantInitTest.cpp | 3 +-- clang/unittests/Support/TimeProfilerTest.cpp | 14 ++++++++------ .../DependencyScannerTest.cpp | 4 ++-- clang/unittests/Tooling/Syntax/TokensTest.cpp | 3 +-- .../unittests/Tooling/Syntax/TreeTestBase.cpp | 3 +-- lldb/source/Commands/CommandObjectTarget.cpp | 6 ++---- .../Clang/ClangModulesDeclVendor.cpp | 4 +--- 33 files changed, 102 insertions(+), 143 deletions(-) diff --git a/clang-tools-extra/clang-include-fixer/IncludeFixer.cpp b/clang-tools-extra/clang-include-fixer/IncludeFixer.cpp index bba8f8acc77da..7b0e4ecda8214 100644 --- a/clang-tools-extra/clang-include-fixer/IncludeFixer.cpp +++ b/clang-tools-extra/clang-include-fixer/IncludeFixer.cpp @@ -89,8 +89,7 @@ bool IncludeFixerActionFactory::runInvocation( assert(Invocation->getFrontendOpts().Inputs.size() == 1); // Set up Clang. - clang::CompilerInstance Compiler(PCHContainerOps); - Compiler.setInvocation(std::move(Invocation)); + CompilerInstance Compiler(std::move(Invocation), std::move(PCHContainerOps)); Compiler.setFileManager(Files); // Create the compiler's actual diagnostics engine. We want to drop all diff --git a/clang-tools-extra/clangd/Compiler.cpp b/clang-tools-extra/clangd/Compiler.cpp index 161cc9ae0ca36..9be0152afd2f7 100644 --- a/clang-tools-extra/clangd/Compiler.cpp +++ b/clang-tools-extra/clangd/Compiler.cpp @@ -145,9 +145,7 @@ prepareCompilerInstance(std::unique_ptr<clang::CompilerInvocation> CI, CI->getFrontendOpts().Inputs[0].getFile(), Buffer.get()); } - auto Clang = std::make_unique<CompilerInstance>( - std::make_shared<PCHContainerOperations>()); - Clang->setInvocation(std::move(CI)); + auto Clang = std::make_unique<CompilerInstance>(std::move(CI)); Clang->createDiagnostics(*VFS, &DiagsClient, false); if (auto VFSWithRemapping = createVFSFromCompilerInvocation( diff --git a/clang-tools-extra/include-cleaner/unittests/RecordTest.cpp b/clang-tools-extra/include-cleaner/unittests/RecordTest.cpp index b1bbb2eb82414..a10c0d5a54a95 100644 --- a/clang-tools-extra/include-cleaner/unittests/RecordTest.cpp +++ b/clang-tools-extra/include-cleaner/unittests/RecordTest.cpp @@ -618,14 +618,14 @@ TEST_F(PragmaIncludeTest, ExportInUnnamedBuffer) { llvm::MemoryBuffer::getMemBufferCopy(Extra.getValue(), /*BufferName=*/"")); - auto Clang = std::make_unique<CompilerInstance>( - std::make_shared<PCHContainerOperations>()); - Clang->createDiagnostics(*VFS); + auto DiagOpts = llvm::makeIntrusiveRefCnt<DiagnosticOptions>(); + auto Diags = CompilerInstance::createDiagnostics(*VFS, DiagOpts.get()); + auto Invocation = std::make_unique<CompilerInvocation>(); + ASSERT_TRUE(CompilerInvocation::CreateFromArgs(*Invocation, {Filename.data()}, + *Diags, "clang")); - Clang->setInvocation(std::make_unique<CompilerInvocation>()); - ASSERT_TRUE(CompilerInvocation::CreateFromArgs( - Clang->getInvocation(), {Filename.data()}, Clang->getDiagnostics(), - "clang")); + auto Clang = std::make_unique<CompilerInstance>(std::move(Invocation)); + Clang->createDiagnostics(*VFS); auto *FM = Clang->createFileManager(VFS); ASSERT_TRUE(Clang->ExecuteAction(*Inputs.MakeAction())); diff --git a/clang/include/clang/Frontend/CompilerInstance.h b/clang/include/clang/Frontend/CompilerInstance.h index d70f5c45b3d38..ebfbfc91b79e6 100644 --- a/clang/include/clang/Frontend/CompilerInstance.h +++ b/clang/include/clang/Frontend/CompilerInstance.h @@ -197,6 +197,8 @@ class CompilerInstance : public ModuleLoader { void operator=(const CompilerInstance &) = delete; public: explicit CompilerInstance( + std::shared_ptr<CompilerInvocation> Invocation = + std::make_shared<CompilerInvocation>(), std::shared_ptr<PCHContainerOperations> PCHContainerOps = std::make_shared<PCHContainerOperations>(), ModuleCache *ModCache = nullptr); @@ -244,18 +246,10 @@ class CompilerInstance : public ModuleLoader { /// @name Compiler Invocation and Options /// @{ - bool hasInvocation() const { return Invocation != nullptr; } - - CompilerInvocation &getInvocation() { - assert(Invocation && "Compiler instance has no invocation!"); - return *Invocation; - } + CompilerInvocation &getInvocation() { return *Invocation; } std::shared_ptr<CompilerInvocation> getInvocationPtr() { return Invocation; } - /// setInvocation - Replace the current invocation. - void setInvocation(std::shared_ptr<CompilerInvocation> Value); - /// Indicates whether we should (re)build the global module index. bool shouldBuildGlobalModuleIndex() const; diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp index 04ddc93415507..dae08fa344008 100644 --- a/clang/lib/Frontend/ASTUnit.cpp +++ b/clang/lib/Frontend/ASTUnit.cpp @@ -1162,9 +1162,8 @@ bool ASTUnit::Parse(std::shared_ptr<PCHContainerOperations> PCHContainerOps, } // Create the compiler instance to use for building the AST. - std::unique_ptr<CompilerInstance> Clang( - new CompilerInstance(std::move(PCHContainerOps))); - Clang->setInvocation(CCInvocation); + auto Clang = std::make_unique<CompilerInstance>(CCInvocation, + std::move(PCHContainerOps)); // Clean up on error, disengage it if the function returns successfully. auto CleanOnError = llvm::make_scope_exit([&]() { @@ -1486,7 +1485,6 @@ void ASTUnit::RealizeTopLevelDeclsFromPreamble() { void ASTUnit::transferASTDataFromCompilerInstance(CompilerInstance &CI) { // Steal the created target, context, and preprocessor if they have been // created. - assert(CI.hasInvocation() && "missing invocation"); LangOpts = CI.getInvocation().LangOpts; TheSema = CI.takeSema(); Consumer = CI.takeASTConsumer(); @@ -1596,14 +1594,13 @@ ASTUnit *ASTUnit::LoadFromCompilerInvocationAction( AST->getFileManager().getVirtualFileSystem()); // Create the compiler instance to use for building the AST. - std::unique_ptr<CompilerInstance> Clang( - new CompilerInstance(std::move(PCHContainerOps))); + auto Clang = std::make_unique<CompilerInstance>(std::move(CI), + std::move(PCHContainerOps)); // Recover resources if we crash before exiting this method. llvm::CrashRecoveryContextCleanupRegistrar<CompilerInstance> CICleanup(Clang.get()); - Clang->setInvocation(std::move(CI)); AST->OriginalSourceFile = std::string(Clang->getFrontendOpts().Inputs[0].getFile()); @@ -2227,15 +2224,14 @@ void ASTUnit::CodeComplete( LangOpts.SpellChecking = false; CCInvocation->getDiagnosticOpts().IgnoreWarnings = true; - std::unique_ptr<CompilerInstance> Clang( - new CompilerInstance(PCHContainerOps)); + auto Clang = std::make_unique<CompilerInstance>(std::move(CCInvocation), + PCHContainerOps); // Recover resources if we crash before exiting this method. llvm::CrashRecoveryContextCleanupRegistrar<CompilerInstance> CICleanup(Clang.get()); - auto &Inv = *CCInvocation; - Clang->setInvocation(std::move(CCInvocation)); + auto &Inv = Clang->getInvocation(); OriginalSourceFile = std::string(Clang->getFrontendOpts().Inputs[0].getFile()); @@ -2249,7 +2245,6 @@ void ASTUnit::CodeComplete( // Create the target instance. if (!Clang->createTarget()) { - Clang->setInvocation(nullptr); return; } diff --git a/clang/lib/Frontend/ChainedIncludesSource.cpp b/clang/lib/Frontend/ChainedIncludesSource.cpp index a7096e27796a0..ce09328188ad5 100644 --- a/clang/lib/Frontend/ChainedIncludesSource.cpp +++ b/clang/lib/Frontend/ChainedIncludesSource.cpp @@ -122,9 +122,8 @@ IntrusiveRefCntPtr<ExternalSemaSource> clang::createChainedIncludesSource( IntrusiveRefCntPtr<DiagnosticsEngine> Diags( new DiagnosticsEngine(DiagID, &CI.getDiagnosticOpts(), DiagClient)); - std::unique_ptr<CompilerInstance> Clang( - new CompilerInstance(CI.getPCHContainerOperations())); - Clang->setInvocation(std::move(CInvok)); + auto Clang = std::make_unique<CompilerInstance>( + std::move(CInvok), CI.getPCHContainerOperations()); Clang->setDiagnostics(Diags.get()); Clang->setTarget(TargetInfo::CreateTargetInfo( Clang->getDiagnostics(), Clang->getInvocation().TargetOpts)); diff --git a/clang/lib/Frontend/CompilerInstance.cpp b/clang/lib/Frontend/CompilerInstance.cpp index bc663acb034e7..a172b3dd77632 100644 --- a/clang/lib/Frontend/CompilerInstance.cpp +++ b/clang/lib/Frontend/CompilerInstance.cpp @@ -67,22 +67,20 @@ using namespace clang; CompilerInstance::CompilerInstance( + std::shared_ptr<CompilerInvocation> Invocation, std::shared_ptr<PCHContainerOperations> PCHContainerOps, ModuleCache *ModCache) : ModuleLoader(/*BuildingModule=*/ModCache), - Invocation(new CompilerInvocation()), + Invocation(std::move(Invocation)), ModCache(ModCache ? ModCache : createCrossProcessModuleCache()), - ThePCHContainerOperations(std::move(PCHContainerOps)) {} + ThePCHContainerOperations(std::move(PCHContainerOps)) { + assert(this->Invocation && "Invocation must not be null"); +} CompilerInstance::~CompilerInstance() { assert(OutputFiles.empty() && "Still output files in flight?"); } -void CompilerInstance::setInvocation( - std::shared_ptr<CompilerInvocation> Value) { - Invocation = std::move(Value); -} - bool CompilerInstance::shouldBuildGlobalModuleIndex() const { return (BuildGlobalModuleIndex || (TheASTReader && TheASTReader->isGlobalIndexUnavailable() && @@ -1207,11 +1205,10 @@ std::unique_ptr<CompilerInstance> CompilerInstance::cloneForModuleCompileImpl( // CompilerInstance::CompilerInstance is responsible for finalizing the // buffers to prevent use-after-frees. auto InstancePtr = std::make_unique<CompilerInstance>( - getPCHContainerOperations(), &getModuleCache()); + std::move(Invocation), getPCHContainerOperations(), &getModuleCache()); auto &Instance = *InstancePtr; - auto &Inv = *Invocation; - Instance.setInvocation(std::move(Invocation)); + auto &Inv = Instance.getInvocation(); if (VFS) { Instance.createFileManager(std::move(VFS)); diff --git a/clang/lib/Frontend/PrecompiledPreamble.cpp b/clang/lib/Frontend/PrecompiledPreamble.cpp index 49fa2e911fea4..4832478d0f8dc 100644 --- a/clang/lib/Frontend/PrecompiledPreamble.cpp +++ b/clang/lib/Frontend/PrecompiledPreamble.cpp @@ -454,14 +454,13 @@ llvm::ErrorOr<PrecompiledPreamble> PrecompiledPreamble::Build( PreprocessorOpts.GeneratePreamble = true; // Create the compiler instance to use for building the precompiled preamble. - std::unique_ptr<CompilerInstance> Clang( - new CompilerInstance(std::move(PCHContainerOps))); + auto Clang = std::make_unique<CompilerInstance>( + std::move(PreambleInvocation), std::move(PCHContainerOps)); // Recover resources if we crash before exiting this method. llvm::CrashRecoveryContextCleanupRegistrar<CompilerInstance> CICleanup( Clang.get()); - Clang->setInvocation(std::move(PreambleInvocation)); Clang->setDiagnostics(&Diagnostics); // Create the target instance. diff --git a/clang/lib/Frontend/Rewrite/FrontendActions.cpp b/clang/lib/Frontend/Rewrite/FrontendActions.cpp index 5d2e1d7877095..3c8fc599433d1 100644 --- a/clang/lib/Frontend/Rewrite/FrontendActions.cpp +++ b/clang/lib/Frontend/Rewrite/FrontendActions.cpp @@ -242,10 +242,9 @@ class RewriteIncludesAction::RewriteImportsListener : public ASTReaderListener { (*OS) << '\n'; // Rewrite the contents of the module in a separate compiler instance. - CompilerInstance Instance(CI.getPCHContainerOperations(), + CompilerInstance Instance(std::make_shared<CompilerInvocation>(CI.getInvocation()), + CI.getPCHContainerOperations(), &CI.getModuleCache()); - Instance.setInvocation( - std::make_shared<CompilerInvocation>(CI.getInvocation())); Instance.createDiagnostics( CI.getVirtualFileSystem(), new ForwardingDiagnosticConsumer(CI.getDiagnosticClient()), diff --git a/clang/lib/StaticAnalyzer/Frontend/ModelInjector.cpp b/clang/lib/StaticAnalyzer/Frontend/ModelInjector.cpp index 168c73df393ff..8dcb6fadd3ada 100644 --- a/clang/lib/StaticAnalyzer/Frontend/ModelInjector.cpp +++ b/clang/lib/StaticAnalyzer/Frontend/ModelInjector.cpp @@ -75,8 +75,8 @@ void ModelInjector::onBodySynthesis(const NamedDecl *D) { // Modules are parsed by a separate CompilerInstance, so this code mimics that // behavior for models - CompilerInstance Instance(CI.getPCHContainerOperations()); - Instance.setInvocation(std::move(Invocation)); + CompilerInstance Instance(std::move(Invocation), + CI.getPCHContainerOperations()); Instance.createDiagnostics( CI.getVirtualFileSystem(), new ForwardingDiagnosticConsumer(CI.getDiagnosticClient()), diff --git a/clang/lib/Testing/TestAST.cpp b/clang/lib/Testing/TestAST.cpp index f7348aa068c51..748f59b856e83 100644 --- a/clang/lib/Testing/TestAST.cpp +++ b/clang/lib/Testing/TestAST.cpp @@ -75,8 +75,7 @@ void createMissingComponents(CompilerInstance &Clang) { } // namespace TestAST::TestAST(const TestInputs &In) { - Clang = std::make_unique<CompilerInstance>( - std::make_shared<PCHContainerOperations>()); + Clang = std::make_unique<CompilerInstance>(); // If we don't manage to finish parsing, create CompilerInstance components // anyway so that the test will see an empty AST instead of crashing. auto RecoverFromEarlyExit = @@ -109,7 +108,6 @@ TestAST::TestAST(const TestInputs &In) { for (const auto &S : In.ExtraArgs) Argv.push_back(S.c_str()); Argv.push_back(Filename.c_str()); - Clang->setInvocation(std::make_unique<CompilerInvocation>()); if (!CompilerInvocation::CreateFromArgs(Clang->getInvocation(), Argv, Clang->getDiagnostics(), "clang")) { ADD_FAILURE() << "Failed to create invocation"; diff --git a/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp b/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp index b88a7cb2dca21..cd67706fb3d3c 100644 --- a/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp +++ b/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp @@ -386,9 +386,9 @@ class DependencyScanningAction : public tooling::ToolAction { // Create a compiler instance to handle the actual work. auto ModCache = makeInProcessModuleCache(Service.getModuleCacheMutexes()); - ScanInstanceStorage.emplace(std::move(PCHContainerOps), ModCache.get()); + ScanInstanceStorage.emplace(std::move(Invocation), + std::move(PCHContainerOps), ModCache.get()); CompilerInstance &ScanInstance = *ScanInstanceStorage; - ScanInstance.setInvocation(std::move(Invocation)); ScanInstance.setBuildingModule(false); // Create the compiler's actual diagnostics engine. diff --git a/clang/lib/Tooling/Tooling.cpp b/clang/lib/Tooling/Tooling.cpp index f0955ef4a0829..3c72f52040142 100644 --- a/clang/lib/Tooling/Tooling.cpp +++ b/clang/lib/Tooling/Tooling.cpp @@ -447,8 +447,7 @@ bool FrontendActionFactory::runInvocation( std::shared_ptr<PCHContainerOperations> PCHContainerOps, DiagnosticConsumer *DiagConsumer) { // Create a compiler instance to handle the actual work. - CompilerInstance Compiler(std::move(PCHContainerOps)); - Compiler.setInvocation(std::move(Invocation)); + CompilerInstance Compiler(std::move(Invocation), std::move(PCHContainerOps)); Compiler.setFileManager(Files); // The FrontendAction can have lifetime requirements for Compiler or its diff --git a/clang/tools/clang-import-test/clang-import-test.cpp b/clang/tools/clang-import-test/clang-import-test.cpp index 41a8a63a2e22b..ccafef075a85e 100644 --- a/clang/tools/clang-import-test/clang-import-test.cpp +++ b/clang/tools/clang-import-test/clang-import-test.cpp @@ -162,18 +162,18 @@ class TestDiagnosticConsumer : public DiagnosticConsumer { }; std::unique_ptr<CompilerInstance> BuildCompilerInstance() { - auto Ins = std::make_unique<CompilerInstance>(); + auto DiagOpts = llvm::makeIntrusiveRefCnt<DiagnosticOptions>(); auto DC = std::make_unique<TestDiagnosticConsumer>(); - const bool ShouldOwnClient = true; - Ins->createDiagnostics(*llvm::vfs::getRealFileSystem(), DC.release(), - ShouldOwnClient); + auto Diags = CompilerInstance::createDiagnostics( + *llvm::vfs::getRealFileSystem(), DiagOpts.get(), DC.get(), + /*ShouldOwnClient=*/false); auto Inv = std::make_unique<CompilerInvocation>(); std::vector<const char *> ClangArgv(ClangArgs.size()); std::transform(ClangArgs.begin(), ClangArgs.end(), ClangArgv.begin(), [](const std::string &s) -> const char * { return s.data(); }); - CompilerInvocation::CreateFromArgs(*Inv, ClangArgv, Ins->getDiagnostics()); + CompilerInvocation::CreateFromArgs(*Inv, ClangArgv, *Diags); { using namespace driver::types; @@ -205,7 +205,10 @@ std::unique_ptr<CompilerInstance> BuildCompilerInstance() { Inv->getCodeGenOpts().setDebugInfo(llvm::codegenoptions::FullDebugInfo); Inv->getTargetOpts().Triple = llvm::sys::getDefaultTargetTriple(); - Ins->setInvocation(std::move(Inv)); + auto Ins = std::make_unique<CompilerInstance>(std::move(Inv)); + + Ins->createDiagnostics(*llvm::vfs::getRealFileSystem(), DC.release(), + /*ShouldOwnClient=*/true); TargetInfo *TI = TargetInfo::CreateTargetInfo( Ins->getDiagnostics(), Ins->getInvocation().TargetOpts); diff --git a/clang/tools/driver/cc1_main.cpp b/clang/tools/driver/cc1_main.cpp index 341520c6a6f73..187528532a44d 100644 --- a/clang/tools/driver/cc1_main.cpp +++ b/clang/tools/driver/cc1_main.cpp @@ -217,11 +217,10 @@ static int PrintEnabledExtensions(const TargetOptions& TargetOpts) { int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) { ensureSufficientStack(); - std::unique_ptr<CompilerInstance> Clang(new CompilerInstance()); IntrusiveRefCntPtr<DiagnosticIDs> DiagID(new DiagnosticIDs()); // Register the support for object-file-wrapped Clang modules. - auto PCHOps = Clang->getPCHContainerOperations(); + auto PCHOps = std::make_shared<PCHContainerOperations>(); PCHOps->registerWriter(std::make_unique<ObjectFilePCHContainerWriter>()); PCHOps->registerReader(std::make_unique<ObjectFilePCHContainerReader>()); @@ -242,9 +241,13 @@ int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) { Diags.setSeverity(diag::remark_cc1_round_trip_generated, diag::Severity::Remark, {}); - bool Success = CompilerInvocation::CreateFromArgs(Clang->getInvocation(), + auto Invocation = std::make_shared<CompilerInvocation>(); + bool Success = CompilerInvocation::CreateFromArgs(*Invocation, Argv, Diags, Argv0); + auto Clang = std::make_unique<CompilerInstance>(std::move(Invocation), + std::move(PCHOps)); + if (!Clang->getFrontendOpts().TimeTracePath.empty()) { llvm::timeTraceProfilerInitialize( Clang->getFrontendOpts().TimeTraceGranularity, Argv0, diff --git a/clang/unittests/AST/ExternalASTSourceTest.cpp b/clang/unittests/AST/ExternalASTSourceTest.cpp index 512f21e8efff4..50df8b5bac2c1 100644 --- a/clang/unittests/AST/ExternalASTSourceTest.cpp +++ b/clang/unittests/AST/ExternalASTSourceTest.cpp @@ -46,16 +46,19 @@ class TestFrontendAction : public ASTFrontendAction { bool testExternalASTSource(ExternalASTSource *Source, StringRef FileContents) { - CompilerInstance Compiler; - Compiler.createDiagnostics(*llvm::vfs::getRealFileSystem()); auto Invocation = std::make_shared<CompilerInvocation>(); Invocation->getPreprocessorOpts().addRemappedFile( "test.cc", MemoryBuffer::getMemBuffer(FileContents).release()); const char *Args[] = { "test.cc" }; - CompilerInvocation::CreateFromArgs(*Invocation, Args, - Compiler.getDiagnostics()); - Compiler.setInvocation(std::move(Invocation)); + + auto InvocationDiagOpts = llvm::makeIntrusiveRefCnt<DiagnosticOptions>(); + auto InvocationDiags = CompilerInstance::createDiagnostics( + *llvm::vfs::getRealFileSystem(), InvocationDiagOpts.get()); + CompilerInvocation::CreateFromArgs(*Invocation, Args, *InvocationDiags); + + CompilerInstance Compiler(std::move(Invocation)); + Compiler.createDiagnostics(*llvm::vfs::getRealFileSystem()); TestFrontendAction Action(Source); return Compiler.ExecuteAction(Action); diff --git a/clang/unittests/Frontend/CodeGenActionTest.cpp b/clang/unittests/Frontend/CodeGenActionTest.cpp index d855302ed0542..90818b72cd6e6 100644 --- a/clang/unittests/Frontend/CodeGenActionTest.cpp +++ b/clang/unittests/Frontend/CodeGenActionTest.cpp @@ -51,8 +51,7 @@ TEST(CodeGenTest, TestNullCodeGen) { FrontendInputFile("test.cc", Language::CXX)); Invocation->getFrontendOpts().ProgramAction = EmitLLVM; Invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; - CompilerInstance Compiler; - Compiler.setInvocation(std::move(Invocation)); + CompilerInstance Compiler(std::move(Invocation)); Compiler.createDiagnostics(*llvm::vfs::getRealFileSystem()); EXPECT_TRUE(Compiler.hasDiagnostics()); @@ -69,8 +68,7 @@ TEST(CodeGenTest, CodeGenFromIRMemBuffer) { FrontendInputFile(*MemBuffer, Language::LLVM_IR)); Invocation->getFrontendOpts().ProgramAction = frontend::EmitLLVMOnly; Invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; - CompilerInstance Compiler; - Compiler.setInvocation(std::move(Invocation)); + CompilerInstance Compiler(std::move(Invocation)); Compiler.createDiagnostics(*llvm::vfs::getRealFileSystem()); EXPECT_TRUE(Compiler.hasDiagnostics()); @@ -97,11 +95,10 @@ TEST(CodeGenTest, DebugInfoCWDCodeGen) { Invocation->getFrontendOpts().ProgramAction = EmitLLVM; Invocation->getTargetOpts().Triple = "x86_64-unknown-linux-gnu"; Invocation->getCodeGenOpts().setDebugInfo(codegenoptions::FullDebugInfo); - CompilerInstance Compiler; + CompilerInstance Compiler(std::move(Invocation)); SmallString<256> IRBuffer; Compiler.setOutputStream(std::make_unique<raw_svector_ostream>(IRBuffer)); - Compiler.setInvocation(std::move(Invocation)); Compiler.createDiagnostics(*VFS); Compiler.createFileManager(std::move(VFS)); diff --git a/clang/unittests/Frontend/CompilerInstanceTest.cpp b/clang/unittests/Frontend/CompilerInstanceTest.cpp index 07329eb299e29..6e9a6f5f728a5 100644 --- a/clang/unittests/Frontend/CompilerInstanceTest.cpp +++ b/clang/unittests/Frontend/CompilerInstanceTest.cpp @@ -66,9 +66,8 @@ TEST(CompilerInstance, DefaultVFSOverlayFromInvocation) { FAIL() << "could not create compiler invocation"; // Create a minimal CompilerInstance which should use the VFS we specified // in the CompilerInvocation (as we don't explicitly set our own). - CompilerInstance Instance; + CompilerInstance Instance(std::move(CInvok)); Instance.setDiagnostics(Diags.get()); - Instance.setInvocation(CInvok); Instance.createFileManager(); // Check if the virtual file exists which means that our VFS is used by the diff --git a/clang/unittests/Frontend/FrontendActionTest.cpp b/clang/unittests/Frontend/FrontendActionTest.cpp index a6bb767e45538..4e040783c923e 100644 --- a/clang/unittests/Frontend/FrontendActionTest.cpp +++ b/clang/unittests/Frontend/FrontendActionTest.cpp @@ -90,8 +90,7 @@ TEST(ASTFrontendAction, Sanity) { FrontendInputFile("test.cc", Language::CXX)); invocation->getFrontendOpts().ProgramAction = frontend::ParseSyntaxOnly; invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; - CompilerInstance compiler; - compiler.setInvocation(std::move(invocation)); + CompilerInstance compiler(std::move(invocation)); compiler.createDiagnostics(*llvm::vfs::getRealFileSystem()); TestASTFrontendAction test_action; @@ -110,8 +109,7 @@ TEST(ASTFrontendAction, IncrementalParsing) { FrontendInputFile("test.cc", Language::CXX)); invocation->getFrontendOpts().ProgramAction = frontend::ParseSyntaxOnly; invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; - CompilerInstance compiler; - compiler.setInvocation(std::move(invocation)); + CompilerInstance compiler(std::move(invocation)); compiler.createDiagnostics(*llvm::vfs::getRealFileSystem()); TestASTFrontendAction test_action(/*enableIncrementalProcessing=*/true); @@ -137,8 +135,7 @@ TEST(ASTFrontendAction, LateTemplateIncrementalParsing) { FrontendInputFile("test.cc", Language::CXX)); invocation->getFrontendOpts().ProgramAction = frontend::ParseSyntaxOnly; invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; - CompilerInstance compiler; - compiler.setInvocation(std::move(invocation)); + CompilerInstance compiler(std::move(invocation)); compiler.createDiagnostics(*llvm::vfs::getRealFileSystem()); TestASTFrontendAction test_action(/*enableIncrementalProcessing=*/true, @@ -183,8 +180,7 @@ TEST(PreprocessorFrontendAction, EndSourceFile) { FrontendInputFile("test.cc", Language::CXX)); Invocation->getFrontendOpts().ProgramAction = frontend::ParseSyntaxOnly; Invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; - CompilerInstance Compiler; - Compiler.setInvocation(std::move(Invocation)); + CompilerInstance Compiler(std::move(Invocation)); Compiler.createDiagnostics(*llvm::vfs::getRealFileSystem()); TestPPCallbacks *Callbacks = new TestPPCallbacks; @@ -244,8 +240,7 @@ TEST(ASTFrontendAction, ExternalSemaSource) { FrontendInputFile("test.cc", Language::CXX)); Invocation->getFrontendOpts().ProgramAction = frontend::ParseSyntaxOnly; Invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; - CompilerInstance Compiler; - Compiler.setInvocation(std::move(Invocation)); + CompilerInstance Compiler(std::move(Invocation)); auto *TDC = new TypoDiagnosticConsumer; Compiler.createDiagnostics(*llvm::vfs::getRealFileSystem(), TDC, /*ShouldOwnClient=*/true); @@ -278,8 +273,7 @@ TEST(GeneratePCHFrontendAction, CacheGeneratedPCH) { Invocation->getFrontendOpts().OutputFile = PCHFilename.str().str(); Invocation->getFrontendOpts().ProgramAction = frontend::GeneratePCH; Invocation->getTargetOpts().Triple = "x86_64-apple-darwin19.0.0"; - CompilerInstance Compiler; - Compiler.setInvocation(std::move(Invocation)); + CompilerInstance Compiler(std::move(Invocation)); Compiler.createDiagnostics(*llvm::vfs::getRealFileSystem()); GeneratePCHAction TestAction; diff --git a/clang/unittests/Frontend/OutputStreamTest.cpp b/clang/unittests/Frontend/OutputStreamTest.cpp index fa5d726d25290..e95538871dcdb 100644 --- a/clang/unittests/Frontend/OutputStreamTest.cpp +++ b/clang/unittests/Frontend/OutputStreamTest.cpp @@ -30,14 +30,13 @@ TEST(FrontendOutputTests, TestOutputStream) { FrontendInputFile("test.cc", Language::CXX)); Invocation->getFrontendOpts().ProgramAction = EmitBC; Invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; - CompilerInstance Compiler; + CompilerInstance Compiler(std::move(Invocation)); SmallVector<char, 256> IRBuffer; std::unique_ptr<raw_pwrite_stream> IRStream( new raw_svector_ostream(IRBuffer)); Compiler.setOutputStream(std::move(IRStream)); - Compiler.setInvocation(std::move(Invocation)); Compiler.createDiagnostics(*llvm::vfs::getRealFileSystem()); bool Success = ExecuteCompilerInvocation(&Compiler); @@ -54,13 +53,12 @@ TEST(FrontendOutputTests, TestVerboseOutputStreamShared) { FrontendInputFile("test.cc", Language::CXX)); Invocation->getFrontendOpts().ProgramAction = EmitBC; Invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; - CompilerInstance Compiler; + CompilerInstance Compiler(std::move(Invocation)); std::string VerboseBuffer; raw_string_ostream VerboseStream(VerboseBuffer); Compiler.setOutputStream(std::make_unique<raw_null_ostream>()); - Compiler.setInvocation(std::move(Invocation)); IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions(); Compiler.createDiagnostics( *llvm::vfs::getRealFileSystem(), @@ -84,13 +82,12 @@ TEST(FrontendOutputTests, TestVerboseOutputStreamOwned) { FrontendInputFile("test.cc", Language::CXX)); Invocation->getFrontendOpts().ProgramAction = EmitBC; Invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu"; - CompilerInstance Compiler; + CompilerInstance Compiler(std::move(Invocation)); std::unique_ptr<raw_ostream> VerboseStream = std::make_unique<raw_string_ostream>(VerboseBuffer); Compiler.setOutputStream(std::make_unique<raw_null_ostream>()); - Compiler.setInvocation(std::move(Invocation)); IntrusiveRefCntPtr<DiagnosticOptions> DiagOpts = new DiagnosticOptions(); Compiler.createDiagnostics( *llvm::vfs::getRealFileSystem(), diff --git a/clang/unittests/Sema/SemaNoloadLookupTest.cpp b/clang/unittests/Sema/SemaNoloadLookupTest.cpp index e31fc78b2391d..c68a71ae05d3f 100644 --- a/clang/unittests/Sema/SemaNoloadLookupTest.cpp +++ b/clang/unittests/Sema/SemaNoloadLookupTest.cpp @@ -81,9 +81,8 @@ class NoloadLookupTest : public ::testing::Test { createInvocation(Args, CIOpts); EXPECT_TRUE(Invocation); - CompilerInstance Instance; + CompilerInstance Instance(std::move(Invocation)); Instance.setDiagnostics(Diags.get()); - Instance.setInvocation(Invocation); Instance.getFrontendOpts().OutputFile = CacheBMIPath; GenerateReducedModuleInterfaceAction Action; EXPECT_TRUE(Instance.ExecuteAction(Action)); diff --git a/clang/unittests/Serialization/ForceCheckFileInputTest.cpp b/clang/unittests/Serialization/ForceCheckFileInputTest.cpp index 6a839d1bf9350..16742a6cb01e8 100644 --- a/clang/unittests/Serialization/ForceCheckFileInputTest.cpp +++ b/clang/unittests/Serialization/ForceCheckFileInputTest.cpp @@ -86,9 +86,8 @@ export int aa = 43; Buf->release(); - CompilerInstance Instance; + CompilerInstance Instance(std::move(Invocation)); Instance.setDiagnostics(Diags.get()); - Instance.setInvocation(Invocation); Instance.getFrontendOpts().OutputFile = BMIPath; @@ -121,9 +120,8 @@ export int aa = 43; EXPECT_TRUE(Invocation); Invocation->getFrontendOpts().DisableFree = false; - CompilerInstance Clang; + CompilerInstance Clang(std::move(Invocation)); - Clang.setInvocation(Invocation); Clang.setDiagnostics(Diags.get()); FileManager *FM = Clang.createFileManager(CIOpts.VFS); Clang.createSourceManager(*FM); diff --git a/clang/unittests/Serialization/LoadSpecLazilyTest.cpp b/clang/unittests/Serialization/LoadSpecLazilyTest.cpp index 7cc074c51fcd0..d62d669149f51 100644 --- a/clang/unittests/Serialization/LoadSpecLazilyTest.cpp +++ b/clang/unittests/Serialization/LoadSpecLazilyTest.cpp @@ -78,9 +78,8 @@ class LoadSpecLazilyTest : public ::testing::Test { createInvocation(Args, CIOpts); EXPECT_TRUE(Invocation); - CompilerInstance Instance; + CompilerInstance Instance(std::move(Invocation)); Instance.setDiagnostics(Diags.get()); - Instance.setInvocation(Invocation); Instance.getFrontendOpts().OutputFile = CacheBMIPath; // Avoid memory leaks. Instance.getFrontendOpts().DisableFree = false; diff --git a/clang/unittests/Serialization/ModuleCacheTest.cpp b/clang/unittests/Serialization/ModuleCacheTest.cpp index 6ceee1c6536cb..38003e93c5d9d 100644 --- a/clang/unittests/Serialization/ModuleCacheTest.cpp +++ b/clang/unittests/Serialization/ModuleCacheTest.cpp @@ -119,9 +119,8 @@ TEST_F(ModuleCacheTest, CachedModuleNewPath) { std::shared_ptr<CompilerInvocation> Invocation = createInvocationAndEnableFree(Args, CIOpts); ASSERT_TRUE(Invocation); - CompilerInstance Instance; + CompilerInstance Instance(std::move(Invocation)); Instance.setDiagnostics(Diags.get()); - Instance.setInvocation(Invocation); SyntaxOnlyAction Action; ASSERT_TRUE(Instance.ExecuteAction(Action)); ASSERT_FALSE(Diags->hasErrorOccurred()); @@ -142,10 +141,10 @@ TEST_F(ModuleCacheTest, CachedModuleNewPath) { std::shared_ptr<CompilerInvocation> Invocation2 = createInvocationAndEnableFree(Args2, CIOpts); ASSERT_TRUE(Invocation2); - CompilerInstance Instance2(Instance.getPCHContainerOperations(), + CompilerInstance Instance2(std::move(Invocation2), + Instance.getPCHContainerOperations(), &Instance.getModuleCache()); Instance2.setDiagnostics(Diags.get()); - Instance2.setInvocation(Invocation2); SyntaxOnlyAction Action2; ASSERT_FALSE(Instance2.ExecuteAction(Action2)); ASSERT_TRUE(Diags->hasErrorOccurred()); @@ -169,9 +168,8 @@ TEST_F(ModuleCacheTest, CachedModuleNewPathAllowErrors) { std::shared_ptr<CompilerInvocation> Invocation = createInvocationAndEnableFree(Args, CIOpts); ASSERT_TRUE(Invocation); - CompilerInstance Instance; + CompilerInstance Instance(std::move(Invocation)); Instance.setDiagnostics(Diags.get()); - Instance.setInvocation(Invocation); SyntaxOnlyAction Action; ASSERT_TRUE(Instance.ExecuteAction(Action)); ASSERT_FALSE(Diags->hasErrorOccurred()); @@ -186,10 +184,10 @@ TEST_F(ModuleCacheTest, CachedModuleNewPathAllowErrors) { std::shared_ptr<CompilerInvocation> Invocation2 = createInvocationAndEnableFree(Args2, CIOpts); ASSERT_TRUE(Invocation2); - CompilerInstance Instance2(Instance.getPCHContainerOperations(), + CompilerInstance Instance2(std::move(Invocation2), + Instance.getPCHContainerOperations(), &Instance.getModuleCache()); Instance2.setDiagnostics(Diags.get()); - Instance2.setInvocation(Invocation2); SyntaxOnlyAction Action2; ASSERT_FALSE(Instance2.ExecuteAction(Action2)); ASSERT_TRUE(Diags->hasErrorOccurred()); diff --git a/clang/unittests/Serialization/NoCommentsTest.cpp b/clang/unittests/Serialization/NoCommentsTest.cpp index a1fb23404e415..3aaaa548c6eff 100644 --- a/clang/unittests/Serialization/NoCommentsTest.cpp +++ b/clang/unittests/Serialization/NoCommentsTest.cpp @@ -97,9 +97,8 @@ void foo() {} createInvocation(Args, CIOpts); ASSERT_TRUE(Invocation); - CompilerInstance Instance; + CompilerInstance Instance(std::move(Invocation)); Instance.setDiagnostics(Diags.get()); - Instance.setInvocation(Invocation); Instance.getFrontendOpts().OutputFile = CacheBMIPath; GenerateReducedModuleInterfaceAction Action; ASSERT_TRUE(Instance.ExecuteAction(Action)); diff --git a/clang/unittests/Serialization/PreambleInNamedModulesTest.cpp b/clang/unittests/Serialization/PreambleInNamedModulesTest.cpp index cf317eddb0f37..7a037d22d5c0d 100644 --- a/clang/unittests/Serialization/PreambleInNamedModulesTest.cpp +++ b/clang/unittests/Serialization/PreambleInNamedModulesTest.cpp @@ -110,9 +110,7 @@ export using ::E; EXPECT_TRUE(BuiltPreamble->CanReuse(*Invocation, *Buffer, Bounds, *VFS)); BuiltPreamble->OverridePreamble(*Invocation, VFS, Buffer.get()); - auto Clang = std::make_unique<CompilerInstance>( - std::make_shared<PCHContainerOperations>()); - Clang->setInvocation(std::move(Invocation)); + auto Clang = std::make_unique<CompilerInstance>(std::move(Invocation)); Clang->setDiagnostics(Diags.get()); if (auto VFSWithRemapping = createVFSFromCompilerInvocation( diff --git a/clang/unittests/Serialization/VarDeclConstantInitTest.cpp b/clang/unittests/Serialization/VarDeclConstantInitTest.cpp index 14c0c30add207..33c3c6b5e61fd 100644 --- a/clang/unittests/Serialization/VarDeclConstantInitTest.cpp +++ b/clang/unittests/Serialization/VarDeclConstantInitTest.cpp @@ -104,9 +104,8 @@ export namespace Fibonacci ASSERT_TRUE(Invocation); Invocation->getFrontendOpts().DisableFree = false; - CompilerInstance Instance; + CompilerInstance Instance(std::move(Invocation)); Instance.setDiagnostics(Diags.get()); - Instance.setInvocation(Invocation); std::string CacheBMIPath = llvm::Twine(TestDir + "/Cached.pcm").str(); Instance.getFrontendOpts().OutputFile = CacheBMIPath; diff --git a/clang/unittests/Support/TimeProfilerTest.cpp b/clang/unittests/Support/TimeProfilerTest.cpp index 995ebf625b7ab..f8053f2dfce48 100644 --- a/clang/unittests/Support/TimeProfilerTest.cpp +++ b/clang/unittests/Support/TimeProfilerTest.cpp @@ -55,15 +55,17 @@ bool compileFromString(StringRef Code, StringRef Standard, StringRef File, } llvm::IntrusiveRefCntPtr<FileManager> Files( new FileManager(FileSystemOptions(), FS)); - CompilerInstance Compiler; - Compiler.createDiagnostics(Files->getVirtualFileSystem()); - Compiler.setFileManager(Files.get()); auto Invocation = std::make_shared<CompilerInvocation>(); std::vector<const char *> Args = {Standard.data(), File.data()}; - CompilerInvocation::CreateFromArgs(*Invocation, Args, - Compiler.getDiagnostics()); - Compiler.setInvocation(std::move(Invocation)); + auto InvocationDiagOpts = llvm::makeIntrusiveRefCnt<DiagnosticOptions>(); + auto InvocationDiags = + CompilerInstance::createDiagnostics(*FS, InvocationDiagOpts.get()); + CompilerInvocation::CreateFromArgs(*Invocation, Args, *InvocationDiags); + + CompilerInstance Compiler(std::move(Invocation)); + Compiler.createDiagnostics(Files->getVirtualFileSystem()); + Compiler.setFileManager(Files.get()); class TestFrontendAction : public ASTFrontendAction { private: diff --git a/clang/unittests/Tooling/DependencyScanning/DependencyScannerTest.cpp b/clang/unittests/Tooling/DependencyScanning/DependencyScannerTest.cpp index db24874ed2498..683d9070b1dcf 100644 --- a/clang/unittests/Tooling/DependencyScanning/DependencyScannerTest.cpp +++ b/clang/unittests/Tooling/DependencyScanning/DependencyScannerTest.cpp @@ -57,8 +57,8 @@ class TestDependencyScanningAction : public tooling::ToolAction { FileManager *FileMgr, std::shared_ptr<PCHContainerOperations> PCHContainerOps, DiagnosticConsumer *DiagConsumer) override { - CompilerInstance Compiler(std::move(PCHContainerOps)); - Compiler.setInvocation(std::move(Invocation)); + CompilerInstance Compiler(std::move(Invocation), + std::move(PCHContainerOps)); Compiler.setFileManager(FileMgr); Compiler.createDiagnostics(FileMgr->getVirtualFileSystem(), DiagConsumer, diff --git a/clang/unittests/Tooling/Syntax/TokensTest.cpp b/clang/unittests/Tooling/Syntax/TokensTest.cpp index dc8a11dbc345c..d42273be1858c 100644 --- a/clang/unittests/Tooling/Syntax/TokensTest.cpp +++ b/clang/unittests/Tooling/Syntax/TokensTest.cpp @@ -132,8 +132,7 @@ class TokenCollectorTest : public ::testing::Test { CI->getFrontendOpts().DisableFree = false; CI->getPreprocessorOpts().addRemappedFile( FileName, llvm::MemoryBuffer::getMemBufferCopy(Code).release()); - CompilerInstance Compiler; - Compiler.setInvocation(std::move(CI)); + CompilerInstance Compiler(std::move(CI)); Compiler.setDiagnostics(Diags.get()); Compiler.setFileManager(FileMgr.get()); Compiler.setSourceManager(SourceMgr.get()); diff --git a/clang/unittests/Tooling/Syntax/TreeTestBase.cpp b/clang/unittests/Tooling/Syntax/TreeTestBase.cpp index 14c446c199906..7710a9cc5a743 100644 --- a/clang/unittests/Tooling/Syntax/TreeTestBase.cpp +++ b/clang/unittests/Tooling/Syntax/TreeTestBase.cpp @@ -151,8 +151,7 @@ SyntaxTreeTest::buildTree(StringRef Code, const TestClangConfig &ClangConfig) { Invocation->getFrontendOpts().DisableFree = false; Invocation->getPreprocessorOpts().addRemappedFile( FileName, llvm::MemoryBuffer::getMemBufferCopy(Code).release()); - CompilerInstance Compiler; - Compiler.setInvocation(Invocation); + CompilerInstance Compiler(Invocation); Compiler.setDiagnostics(Diags.get()); Compiler.setFileManager(FileMgr.get()); Compiler.setSourceManager(SourceMgr.get()); diff --git a/lldb/source/Commands/CommandObjectTarget.cpp b/lldb/source/Commands/CommandObjectTarget.cpp index 3f7d3007ed168..e5421e566cd54 100644 --- a/lldb/source/Commands/CommandObjectTarget.cpp +++ b/lldb/source/Commands/CommandObjectTarget.cpp @@ -2208,11 +2208,9 @@ class CommandObjectTargetModulesDumpClangPCMInfo : public CommandObjectParsed { return; } - clang::CompilerInstance compiler; - compiler.createDiagnostics(*FileSystem::Instance().GetVirtualFileSystem()); - const char *clang_args[] = {"clang", pcm_path}; - compiler.setInvocation(clang::createInvocation(clang_args)); + clang::CompilerInstance compiler(clang::createInvocation(clang_args)); + compiler.createDiagnostics(*FileSystem::Instance().GetVirtualFileSystem()); // Pass empty deleter to not attempt to free memory that was allocated // outside of the current scope, possibly statically. diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp b/lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp index 5b1353454a1c6..0c13e6202fef7 100644 --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp @@ -731,13 +731,11 @@ ClangModulesDeclVendor::Create(Target &target) { invocation->getPreprocessorOpts().addRemappedFile(ModuleImportBufferName, source_buffer.release()); - std::unique_ptr<clang::CompilerInstance> instance( - new clang::CompilerInstance); + auto instance = std::make_unique<clang::CompilerInstance>(invocation); // Make sure clang uses the same VFS as LLDB. instance->createFileManager(FileSystem::Instance().GetVirtualFileSystem()); instance->setDiagnostics(diagnostics_engine.get()); - instance->setInvocation(invocation); std::unique_ptr<clang::FrontendAction> action(new clang::SyntaxOnlyAction); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits