From: Alp Toker Date: Sun, 6 Jul 2014 05:26:07 +0000 (+0000) Subject: Use non-intrusive refcounting for LangOptions X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=269d840e40cdff7ff677fe11361af91e759ac1f1;p=platform%2Fupstream%2Fllvm.git 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 --- diff --git a/clang/include/clang/Basic/LangOptions.h b/clang/include/clang/Basic/LangOptions.h index e969161..9bffc7c 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 d5d6d49..c9ba6d2 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 4b3b9be..0305d8a 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 be35e31..15f4ca4 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())