From 269d840e40cdff7ff677fe11361af91e759ac1f1 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. llvm-svn: 212387 --- clang/include/clang/Basic/LangOptions.h | 3 +-- clang/include/clang/Frontend/ASTUnit.h | 2 +- clang/include/clang/Frontend/CompilerInvocation.h | 5 ++--- clang/lib/Frontend/ASTUnit.cpp | 4 ++-- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/clang/include/clang/Basic/LangOptions.h b/clang/include/clang/Basic/LangOptions.h index e969161b8ff4..9bffc7cb18cf 100644 --- a/clang/include/clang/Basic/LangOptions.h +++ b/clang/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/clang/include/clang/Frontend/ASTUnit.h b/clang/include/clang/Frontend/ASTUnit.h index d5d6d49bdee3..c9ba6d238dad 100644 --- a/clang/include/clang/Frontend/ASTUnit.h +++ b/clang/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/clang/include/clang/Frontend/CompilerInvocation.h b/clang/include/clang/Frontend/CompilerInvocation.h index 4b3b9be55f5b..0305d8a9afb1 100644 --- a/clang/include/clang/Frontend/CompilerInvocation.h +++ b/clang/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/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp index be35e31a0b6d..15f4ca4b0e82 100644 --- a/clang/lib/Frontend/ASTUnit.cpp +++ b/clang/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())