From 3e84eb7db6c89f09a524d08ea6c03c0022decb64 Mon Sep 17 00:00:00 2001 From: Alp Toker Date: Sun, 6 Jul 2014 05:26:07 +0000 Subject: [PATCH] Use non-intrusive refcounting for LangOptions This type is only refcounted in a couple of places so making ownership explicit improves clarity. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212387 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/LangOptions.h | 3 +-- include/clang/Frontend/ASTUnit.h | 2 +- include/clang/Frontend/CompilerInvocation.h | 5 ++--- lib/Frontend/ASTUnit.cpp | 4 ++-- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/include/clang/Basic/LangOptions.h b/include/clang/Basic/LangOptions.h index e969161b8f..9bffc7cb18 100644 --- a/include/clang/Basic/LangOptions.h +++ b/include/clang/Basic/LangOptions.h @@ -19,7 +19,6 @@ #include "clang/Basic/LLVM.h" #include "clang/Basic/ObjCRuntime.h" #include "clang/Basic/Visibility.h" -#include "llvm/ADT/IntrusiveRefCntPtr.h" #include namespace clang { @@ -53,7 +52,7 @@ protected: /// \brief Keeps track of the various options that can be /// enabled, which controls the dialect of C or C++ that is accepted. -class LangOptions : public RefCountedBase, public LangOptionsBase { +class LangOptions : public LangOptionsBase { public: typedef clang::Visibility Visibility; diff --git a/include/clang/Frontend/ASTUnit.h b/include/clang/Frontend/ASTUnit.h index d5d6d49bde..c9ba6d238d 100644 --- a/include/clang/Frontend/ASTUnit.h +++ b/include/clang/Frontend/ASTUnit.h @@ -83,7 +83,7 @@ public: }; private: - IntrusiveRefCntPtr LangOpts; + std::shared_ptr LangOpts; IntrusiveRefCntPtr Diagnostics; IntrusiveRefCntPtr FileMgr; IntrusiveRefCntPtr SourceMgr; diff --git a/include/clang/Frontend/CompilerInvocation.h b/include/clang/Frontend/CompilerInvocation.h index 4b3b9be55f..0305d8a9af 100644 --- a/include/clang/Frontend/CompilerInvocation.h +++ b/include/clang/Frontend/CompilerInvocation.h @@ -52,9 +52,9 @@ bool ParseDiagnosticArgs(DiagnosticOptions &Opts, llvm::opt::ArgList &Args, class CompilerInvocationBase : public RefCountedBase { void operator=(const CompilerInvocationBase &) LLVM_DELETED_FUNCTION; -protected: +public: /// Options controlling the language variant. - IntrusiveRefCntPtr LangOpts; + std::shared_ptr LangOpts; /// Options controlling the target. IntrusiveRefCntPtr TargetOpts; @@ -68,7 +68,6 @@ protected: /// Options controlling the preprocessor (aside from \#include handling). IntrusiveRefCntPtr PreprocessorOpts; -public: CompilerInvocationBase(); ~CompilerInvocationBase(); diff --git a/lib/Frontend/ASTUnit.cpp b/lib/Frontend/ASTUnit.cpp index be35e31a0b..15f4ca4b0e 100644 --- a/lib/Frontend/ASTUnit.cpp +++ b/lib/Frontend/ASTUnit.cpp @@ -1087,7 +1087,7 @@ bool ASTUnit::Parse(llvm::MemoryBuffer *OverrideMainBuffer) { "IR inputs not support here!"); // Configure the various subsystems. - LangOpts = &Clang->getLangOpts(); + LangOpts = Clang->getInvocation().LangOpts; FileSystemOpts = Clang->getFileSystemOpts(); IntrusiveRefCntPtr VFS = createVFSFromCompilerInvocation(Clang->getInvocation(), getDiagnostics()); @@ -1709,7 +1709,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().getLangOpts(); + LangOpts = CI.getInvocation().LangOpts; TheSema.reset(CI.takeSema()); Consumer.reset(CI.takeASTConsumer()); if (CI.hasASTContext()) -- 2.40.0