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 LangOpts; + std::unique_ptr LangOpts; IntrusiveRefCntPtr Diagnostics; IntrusiveRefCntPtr FileMgr; IntrusiveRefCntPtr 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 - LoadFromASTFile(StringRef Filename, const PCHContainerReader &PCHContainerRdr, - WhatToLoad ToLoad, - IntrusiveRefCntPtr Diags, - const FileSystemOptions &FileSystemOpts, - const HeaderSearchOptions &HSOpts, - std::shared_ptr LangOpts = nullptr, - bool OnlyLocalDecls = false, - CaptureDiagsKind CaptureDiagnostics = CaptureDiagsKind::None, - bool AllowASTWithCompilerErrors = false, - bool UserFilesAreVolatile = false, - IntrusiveRefCntPtr VFS = - llvm::vfs::getRealFileSystem()); + static std::unique_ptr LoadFromASTFile( + StringRef Filename, const PCHContainerReader &PCHContainerRdr, + WhatToLoad ToLoad, IntrusiveRefCntPtr 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 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 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 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 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::LoadFromASTFile( StringRef Filename, const PCHContainerReader &PCHContainerRdr, WhatToLoad ToLoad, IntrusiveRefCntPtr Diags, const FileSystemOptions &FileSystemOpts, const HeaderSearchOptions &HSOpts, - std::shared_ptr LangOpts, bool OnlyLocalDecls, + const LangOptions *LangOpts, bool OnlyLocalDecls, CaptureDiagsKind CaptureDiagnostics, bool AllowASTWithCompilerErrors, bool UserFilesAreVolatile, IntrusiveRefCntPtr VFS) { std::unique_ptr AST(new ASTUnit(true)); @@ -819,7 +819,8 @@ std::unique_ptr ASTUnit::LoadFromASTFile( ConfigureDiags(Diags, *AST, CaptureDiagnostics); - AST->LangOpts = LangOpts ? LangOpts : std::make_shared(); + AST->LangOpts = LangOpts ? std::make_unique(*LangOpts) + : std::make_unique(); AST->OnlyLocalDecls = OnlyLocalDecls; AST->CaptureDiagnostics = CaptureDiagnostics; AST->Diagnostics = Diags; @@ -1211,7 +1212,8 @@ bool ASTUnit::Parse(std::shared_ptr PCHContainerOps, "IR inputs not support here!"); // Configure the various subsystems. - LangOpts = Clang->getInvocation().LangOpts; + LangOpts = + std::make_unique(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(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 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;