[clang] [clang-tools-extra] [lldb] [clang][frontend] Require invocation to construct `CompilerInstance` (PR #137668)
Jan Svoboda via cfe-commits
cfe-commits at lists.llvm.org
Tue Apr 29 10:41:42 PDT 2025
https://github.com/jansvoboda11 updated https://github.com/llvm/llvm-project/pull/137668
>From 692779413664a17287a1f34d4e3225ae8bc96ae0 Mon Sep 17 00:00:00 2001
From: Jan Svoboda <jan_svoboda at apple.com>
Date: Mon, 21 Apr 2025 11:55:43 -0700
Subject: [PATCH 1/2] [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 8d38c7c7c15eb..5f25a932c5052 100644
--- a/clang/include/clang/Frontend/CompilerInstance.h
+++ b/clang/include/clang/Frontend/CompilerInstance.h
@@ -204,6 +204,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);
@@ -251,18 +253,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 e05385d119870..35f823e9407db 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([&]() {
@@ -1487,7 +1486,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 = std::make_unique<LangOptions>(CI.getInvocation().getLangOpts());
TheSema = CI.takeSema();
Consumer = CI.takeASTConsumer();
@@ -1601,14 +1599,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());
@@ -2232,15 +2229,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());
@@ -2254,7 +2250,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 4cad1b886c8cf..95b0ed248d545 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().getTargetOpts()));
diff --git a/clang/lib/Frontend/CompilerInstance.cpp b/clang/lib/Frontend/CompilerInstance.cpp
index cbc9c9dcee05f..1e8046db609ca 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() &&
@@ -1210,11 +1208,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 (ThreadSafeConfig) {
Instance.createFileManager(ThreadSafeConfig->getVFS());
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 8e05a678fcdbc..2443918526263 100644
--- a/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp
+++ b/clang/lib/Tooling/DependencyScanning/DependencyScanningWorker.cpp
@@ -412,9 +412,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 ce3d0f6c503b2..765f342947046 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().getTargetOpts());
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 27d2d7f451d36..0eda3a1dab403 100644
--- a/clang/unittests/Frontend/OutputStreamTest.cpp
+++ b/clang/unittests/Frontend/OutputStreamTest.cpp
@@ -31,14 +31,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);
@@ -56,13 +55,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(),
@@ -87,13 +85,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 16d2beb48c82c..c79d90d4f5044 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);
>From 1fd592de557849af268a6dfa85ec5fed24dcaddd Mon Sep 17 00:00:00 2001
From: Jan Svoboda <jan_svoboda at apple.com>
Date: Tue, 29 Apr 2025 10:40:44 -0700
Subject: [PATCH 2/2] git-clang-format
---
clang/lib/Frontend/PrecompiledPreamble.cpp | 4 ++--
clang/lib/Frontend/Rewrite/FrontendActions.cpp | 6 +++---
clang/tools/driver/cc1_main.cpp | 4 ++--
clang/unittests/AST/ExternalASTSourceTest.cpp | 4 +---
4 files changed, 8 insertions(+), 10 deletions(-)
diff --git a/clang/lib/Frontend/PrecompiledPreamble.cpp b/clang/lib/Frontend/PrecompiledPreamble.cpp
index 4832478d0f8dc..70f9b66b92b0d 100644
--- a/clang/lib/Frontend/PrecompiledPreamble.cpp
+++ b/clang/lib/Frontend/PrecompiledPreamble.cpp
@@ -454,8 +454,8 @@ llvm::ErrorOr<PrecompiledPreamble> PrecompiledPreamble::Build(
PreprocessorOpts.GeneratePreamble = true;
// Create the compiler instance to use for building the precompiled preamble.
- auto Clang = std::make_unique<CompilerInstance>(
- std::move(PreambleInvocation), 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(
diff --git a/clang/lib/Frontend/Rewrite/FrontendActions.cpp b/clang/lib/Frontend/Rewrite/FrontendActions.cpp
index 3c8fc599433d1..f955845c9cbf2 100644
--- a/clang/lib/Frontend/Rewrite/FrontendActions.cpp
+++ b/clang/lib/Frontend/Rewrite/FrontendActions.cpp
@@ -242,9 +242,9 @@ class RewriteIncludesAction::RewriteImportsListener : public ASTReaderListener {
(*OS) << '\n';
// Rewrite the contents of the module in a separate compiler instance.
- CompilerInstance Instance(std::make_shared<CompilerInvocation>(CI.getInvocation()),
- CI.getPCHContainerOperations(),
- &CI.getModuleCache());
+ CompilerInstance Instance(
+ std::make_shared<CompilerInvocation>(CI.getInvocation()),
+ CI.getPCHContainerOperations(), &CI.getModuleCache());
Instance.createDiagnostics(
CI.getVirtualFileSystem(),
new ForwardingDiagnosticConsumer(CI.getDiagnosticClient()),
diff --git a/clang/tools/driver/cc1_main.cpp b/clang/tools/driver/cc1_main.cpp
index 187528532a44d..0e2c918233775 100644
--- a/clang/tools/driver/cc1_main.cpp
+++ b/clang/tools/driver/cc1_main.cpp
@@ -242,8 +242,8 @@ int cc1_main(ArrayRef<const char *> Argv, const char *Argv0, void *MainAddr) {
diag::Severity::Remark, {});
auto Invocation = std::make_shared<CompilerInvocation>();
- bool Success = CompilerInvocation::CreateFromArgs(*Invocation,
- Argv, Diags, Argv0);
+ bool Success =
+ CompilerInvocation::CreateFromArgs(*Invocation, Argv, Diags, Argv0);
auto Clang = std::make_unique<CompilerInstance>(std::move(Invocation),
std::move(PCHOps));
diff --git a/clang/unittests/AST/ExternalASTSourceTest.cpp b/clang/unittests/AST/ExternalASTSourceTest.cpp
index 50df8b5bac2c1..807bab1b3dd81 100644
--- a/clang/unittests/AST/ExternalASTSourceTest.cpp
+++ b/clang/unittests/AST/ExternalASTSourceTest.cpp
@@ -44,8 +44,7 @@ class TestFrontendAction : public ASTFrontendAction {
IntrusiveRefCntPtr<ExternalASTSource> Source;
};
-bool testExternalASTSource(ExternalASTSource *Source,
- StringRef FileContents) {
+bool testExternalASTSource(ExternalASTSource *Source, StringRef FileContents) {
auto Invocation = std::make_shared<CompilerInvocation>();
Invocation->getPreprocessorOpts().addRemappedFile(
@@ -64,7 +63,6 @@ bool testExternalASTSource(ExternalASTSource *Source,
return Compiler.ExecuteAction(Action);
}
-
// Ensure that a failed name lookup into an external source only occurs once.
TEST(ExternalASTSourceTest, FailedLookupOccursOnce) {
struct TestSource : ExternalASTSource {
More information about the cfe-commits
mailing list