Author: Jan Svoboda Date: 2025-04-29T10:37:37-07:00 New Revision: c85e43bd45fee5de106d79965db484339b5cc46f
URL: https://github.com/llvm/llvm-project/commit/c85e43bd45fee5de106d79965db484339b5cc46f DIFF: https://github.com/llvm/llvm-project/commit/c85e43bd45fee5de106d79965db484339b5cc46f.diff LOG: [clang] Hide the `LangOptions` pointer from `CompilerInvocation` (#137675) This PR makes `CompilerInvocation` the sole owner of the `LangOptions` instance. Added: Modified: clang/include/clang/Frontend/ASTUnit.h clang/include/clang/Frontend/CompilerInstance.h clang/include/clang/Frontend/CompilerInvocation.h clang/lib/Frontend/ASTUnit.cpp clang/lib/Frontend/FrontendAction.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Frontend/ASTUnit.h b/clang/include/clang/Frontend/ASTUnit.h index 2baa2d1cc540d..ac99f0fb2b471 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; @@ -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, - std::shared_ptr<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 diff --git a/clang/include/clang/Frontend/CompilerInstance.h b/clang/include/clang/Frontend/CompilerInstance.h index ee15b1023eb26..8d38c7c7c15eb 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 f2c653d3075df..3ca900729b4a8 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; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits