[clang] [clang] Hide the `LangOptions` pointer from `CompilerInvocation` (PR #137675)
Jan Svoboda via cfe-commits
cfe-commits at lists.llvm.org
Tue Apr 29 10:37:09 PDT 2025
https://github.com/jansvoboda11 updated https://github.com/llvm/llvm-project/pull/137675
>From 14469a8726fc1d038f41c7e3e29a84ec8f52d013 Mon Sep 17 00:00:00 2001
From: Jan Svoboda <jan_svoboda at apple.com>
Date: Thu, 22 Aug 2024 08:45:08 -0700
Subject: [PATCH 1/2] [clang] Hide the `LangOptions` pointer from
`CompilerInvocation`
---
clang/include/clang/Frontend/ASTUnit.h | 4 ++--
clang/include/clang/Frontend/CompilerInstance.h | 3 ---
clang/include/clang/Frontend/CompilerInvocation.h | 6 ------
clang/lib/Frontend/ASTUnit.cpp | 10 ++++++----
clang/lib/Frontend/FrontendAction.cpp | 2 +-
5 files changed, 9 insertions(+), 16 deletions(-)
diff --git a/clang/include/clang/Frontend/ASTUnit.h b/clang/include/clang/Frontend/ASTUnit.h
index 2baa2d1cc540d..73686b0eacbe2 100644
--- a/clang/include/clang/Frontend/ASTUnit.h
+++ b/clang/include/clang/Frontend/ASTUnit.h
@@ -106,7 +106,7 @@ class ASTUnit {
};
private:
- std::shared_ptr<LangOptions> LangOpts;
+ std::unique_ptr<LangOptions> LangOpts;
IntrusiveRefCntPtr<DiagnosticsEngine> Diagnostics;
IntrusiveRefCntPtr<FileManager> FileMgr;
IntrusiveRefCntPtr<SourceManager> SourceMgr;
@@ -704,7 +704,7 @@ class ASTUnit {
IntrusiveRefCntPtr<DiagnosticsEngine> Diags,
const FileSystemOptions &FileSystemOpts,
const HeaderSearchOptions &HSOpts,
- std::shared_ptr<LangOptions> LangOpts = nullptr,
+ const LangOptions *LangOpts = nullptr,
bool OnlyLocalDecls = false,
CaptureDiagsKind CaptureDiagnostics = CaptureDiagsKind::None,
bool AllowASTWithCompilerErrors = false,
diff --git a/clang/include/clang/Frontend/CompilerInstance.h b/clang/include/clang/Frontend/CompilerInstance.h
index 7de4fb531d0e7..78ac1079354de 100644
--- a/clang/include/clang/Frontend/CompilerInstance.h
+++ b/clang/include/clang/Frontend/CompilerInstance.h
@@ -327,9 +327,6 @@ class CompilerInstance : public ModuleLoader {
LangOptions &getLangOpts() { return Invocation->getLangOpts(); }
const LangOptions &getLangOpts() const { return Invocation->getLangOpts(); }
- std::shared_ptr<LangOptions> getLangOptsPtr() const {
- return Invocation->getLangOptsPtr();
- }
PreprocessorOptions &getPreprocessorOpts() {
return Invocation->getPreprocessorOpts();
diff --git a/clang/include/clang/Frontend/CompilerInvocation.h b/clang/include/clang/Frontend/CompilerInvocation.h
index 1827ff0f6816d..31bf7e94efab8 100644
--- a/clang/include/clang/Frontend/CompilerInvocation.h
+++ b/clang/include/clang/Frontend/CompilerInvocation.h
@@ -265,12 +265,6 @@ class CompilerInvocation : public CompilerInvocationBase {
}
/// @}
- /// Base class internals.
- /// @{
- using CompilerInvocationBase::LangOpts;
- std::shared_ptr<LangOptions> getLangOptsPtr() { return LangOpts; }
- /// @}
-
/// Create a compiler invocation from a list of input options.
/// \returns true on success.
///
diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp
index 3e4da76916585..e05385d119870 100644
--- a/clang/lib/Frontend/ASTUnit.cpp
+++ b/clang/lib/Frontend/ASTUnit.cpp
@@ -805,7 +805,7 @@ std::unique_ptr<ASTUnit> ASTUnit::LoadFromASTFile(
StringRef Filename, const PCHContainerReader &PCHContainerRdr,
WhatToLoad ToLoad, IntrusiveRefCntPtr<DiagnosticsEngine> Diags,
const FileSystemOptions &FileSystemOpts, const HeaderSearchOptions &HSOpts,
- std::shared_ptr<LangOptions> LangOpts, bool OnlyLocalDecls,
+ const LangOptions *LangOpts, bool OnlyLocalDecls,
CaptureDiagsKind CaptureDiagnostics, bool AllowASTWithCompilerErrors,
bool UserFilesAreVolatile, IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS) {
std::unique_ptr<ASTUnit> AST(new ASTUnit(true));
@@ -819,7 +819,8 @@ std::unique_ptr<ASTUnit> ASTUnit::LoadFromASTFile(
ConfigureDiags(Diags, *AST, CaptureDiagnostics);
- AST->LangOpts = LangOpts ? LangOpts : std::make_shared<LangOptions>();
+ AST->LangOpts = LangOpts ? std::make_unique<LangOptions>(*LangOpts)
+ : std::make_unique<LangOptions>();
AST->OnlyLocalDecls = OnlyLocalDecls;
AST->CaptureDiagnostics = CaptureDiagnostics;
AST->Diagnostics = Diags;
@@ -1211,7 +1212,8 @@ bool ASTUnit::Parse(std::shared_ptr<PCHContainerOperations> PCHContainerOps,
"IR inputs not support here!");
// Configure the various subsystems.
- LangOpts = Clang->getInvocation().LangOpts;
+ LangOpts =
+ std::make_unique<LangOptions>(Clang->getInvocation().getLangOpts());
FileSystemOpts = Clang->getFileSystemOpts();
ResetForParse();
@@ -1486,7 +1488,7 @@ 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;
+ LangOpts = std::make_unique<LangOptions>(CI.getInvocation().getLangOpts());
TheSema = CI.takeSema();
Consumer = CI.takeASTConsumer();
if (CI.hasASTContext())
diff --git a/clang/lib/Frontend/FrontendAction.cpp b/clang/lib/Frontend/FrontendAction.cpp
index 783d1a64132b6..9b2aa253c90ee 100644
--- a/clang/lib/Frontend/FrontendAction.cpp
+++ b/clang/lib/Frontend/FrontendAction.cpp
@@ -847,7 +847,7 @@ bool FrontendAction::BeginSourceFile(CompilerInstance &CI,
std::unique_ptr<ASTUnit> AST = ASTUnit::LoadFromASTFile(
InputFile, CI.getPCHContainerReader(), ASTUnit::LoadEverything, Diags,
- CI.getFileSystemOpts(), CI.getHeaderSearchOpts(), CI.getLangOptsPtr());
+ CI.getFileSystemOpts(), CI.getHeaderSearchOpts(), &CI.getLangOpts());
if (!AST)
return false;
>From 37b7e8b3b730824d9b6d40ae22d732a491f4a1b3 Mon Sep 17 00:00:00 2001
From: Jan Svoboda <jan_svoboda at apple.com>
Date: Tue, 29 Apr 2025 10:36:52 -0700
Subject: [PATCH 2/2] git-clang-format
---
clang/include/clang/Frontend/ASTUnit.h | 24 +++++++++++-------------
1 file changed, 11 insertions(+), 13 deletions(-)
diff --git a/clang/include/clang/Frontend/ASTUnit.h b/clang/include/clang/Frontend/ASTUnit.h
index 73686b0eacbe2..ac99f0fb2b471 100644
--- a/clang/include/clang/Frontend/ASTUnit.h
+++ b/clang/include/clang/Frontend/ASTUnit.h
@@ -698,19 +698,17 @@ class ASTUnit {
/// lifetime is expected to extend past that of the returned ASTUnit.
///
/// \returns - The initialized ASTUnit or null if the AST failed to load.
- static std::unique_ptr<ASTUnit>
- LoadFromASTFile(StringRef Filename, const PCHContainerReader &PCHContainerRdr,
- WhatToLoad ToLoad,
- IntrusiveRefCntPtr<DiagnosticsEngine> Diags,
- const FileSystemOptions &FileSystemOpts,
- const HeaderSearchOptions &HSOpts,
- const LangOptions *LangOpts = nullptr,
- bool OnlyLocalDecls = false,
- CaptureDiagsKind CaptureDiagnostics = CaptureDiagsKind::None,
- bool AllowASTWithCompilerErrors = false,
- bool UserFilesAreVolatile = false,
- IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS =
- llvm::vfs::getRealFileSystem());
+ static std::unique_ptr<ASTUnit> LoadFromASTFile(
+ StringRef Filename, const PCHContainerReader &PCHContainerRdr,
+ WhatToLoad ToLoad, IntrusiveRefCntPtr<DiagnosticsEngine> Diags,
+ const FileSystemOptions &FileSystemOpts,
+ const HeaderSearchOptions &HSOpts, const LangOptions *LangOpts = nullptr,
+ bool OnlyLocalDecls = false,
+ CaptureDiagsKind CaptureDiagnostics = CaptureDiagsKind::None,
+ bool AllowASTWithCompilerErrors = false,
+ bool UserFilesAreVolatile = false,
+ IntrusiveRefCntPtr<llvm::vfs::FileSystem> VFS =
+ llvm::vfs::getRealFileSystem());
private:
/// Helper function for \c LoadFromCompilerInvocation() and
More information about the cfe-commits
mailing list