aboutsummaryrefslogtreecommitdiff
path: root/clang/lib
diff options
context:
space:
mode:
authorJan Svoboda <jan_svoboda@apple.com>2025-04-29 10:37:37 -0700
committerGitHub <noreply@github.com>2025-04-29 10:37:37 -0700
commitc85e43bd45fee5de106d79965db484339b5cc46f (patch)
tree1a8a698334d01238f3491b2ac07414c3b99f8240 /clang/lib
parent0f90a7b323bcaa087be31aa135b71694db2d5ff9 (diff)
downloadllvm-c85e43bd45fee5de106d79965db484339b5cc46f.zip
llvm-c85e43bd45fee5de106d79965db484339b5cc46f.tar.gz
llvm-c85e43bd45fee5de106d79965db484339b5cc46f.tar.bz2
[clang] Hide the `LangOptions` pointer from `CompilerInvocation` (#137675)
This PR makes `CompilerInvocation` the sole owner of the `LangOptions` instance.
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Frontend/ASTUnit.cpp10
-rw-r--r--clang/lib/Frontend/FrontendAction.cpp2
2 files changed, 7 insertions, 5 deletions
diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp
index 3e4da76..e05385d 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 783d1a64..9b2aa25 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;