<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sat, Jul 5, 2014 at 10:26 PM, Alp Toker <span dir="ltr"><<a href="mailto:alp@nuanti.com" target="_blank">alp@nuanti.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Author: alp<br>
Date: Sun Jul  6 00:26:07 2014<br>
New Revision: 212387<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=212387&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=212387&view=rev</a><br>
Log:<br>
Use non-intrusive refcounting for LangOptions<br>
<br>
This type is only refcounted in a couple of places so making ownership explicit<br>
improves clarity.<br>
<br>
Modified:<br>
    cfe/trunk/include/clang/Basic/LangOptions.h<br>
    cfe/trunk/include/clang/Frontend/ASTUnit.h<br>
    cfe/trunk/include/clang/Frontend/CompilerInvocation.h<br>
    cfe/trunk/lib/Frontend/ASTUnit.cpp<br>
<br>
Modified: cfe/trunk/include/clang/Basic/LangOptions.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/LangOptions.h?rev=212387&r1=212386&r2=212387&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/LangOptions.h?rev=212387&r1=212386&r2=212387&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/include/clang/Basic/LangOptions.h (original)<br>
+++ cfe/trunk/include/clang/Basic/LangOptions.h Sun Jul  6 00:26:07 2014<br>
@@ -19,7 +19,6 @@<br>
 #include "clang/Basic/LLVM.h"<br>
 #include "clang/Basic/ObjCRuntime.h"<br>
 #include "clang/Basic/Visibility.h"<br>
-#include "llvm/ADT/IntrusiveRefCntPtr.h"<br>
 #include <string><br>
<br>
 namespace clang {<br>
@@ -53,7 +52,7 @@ protected:<br>
<br>
 /// \brief Keeps track of the various options that can be<br>
 /// enabled, which controls the dialect of C or C++ that is accepted.<br>
-class LangOptions : public RefCountedBase<LangOptions>, public LangOptionsBase {<br>
+class LangOptions : public LangOptionsBase {<br>
 public:<br>
   typedef clang::Visibility Visibility;<br>
<br>
<br>
Modified: cfe/trunk/include/clang/Frontend/ASTUnit.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/ASTUnit.h?rev=212387&r1=212386&r2=212387&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/ASTUnit.h?rev=212387&r1=212386&r2=212387&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/include/clang/Frontend/ASTUnit.h (original)<br>
+++ cfe/trunk/include/clang/Frontend/ASTUnit.h Sun Jul  6 00:26:07 2014<br>
@@ -83,7 +83,7 @@ public:<br>
   };<br>
<br>
 private:<br>
-  IntrusiveRefCntPtr<LangOptions>         LangOpts;<br>
+  std::shared_ptr<LangOptions>            LangOpts;<br>
   IntrusiveRefCntPtr<DiagnosticsEngine>   Diagnostics;<br>
   IntrusiveRefCntPtr<FileManager>         FileMgr;<br>
   IntrusiveRefCntPtr<SourceManager>       SourceMgr;<br>
<br>
Modified: cfe/trunk/include/clang/Frontend/CompilerInvocation.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CompilerInvocation.h?rev=212387&r1=212386&r2=212387&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/CompilerInvocation.h?rev=212387&r1=212386&r2=212387&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/include/clang/Frontend/CompilerInvocation.h (original)<br>
+++ cfe/trunk/include/clang/Frontend/CompilerInvocation.h Sun Jul  6 00:26:07 2014<br>
@@ -52,9 +52,9 @@ bool ParseDiagnosticArgs(DiagnosticOptio<br>
 class CompilerInvocationBase : public RefCountedBase<CompilerInvocation> {<br>
   void operator=(const CompilerInvocationBase &) LLVM_DELETED_FUNCTION;<br>
<br>
-protected:<br>
+public:<br></blockquote><div><br></div><div>Why make the fields public?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
   /// Options controlling the language variant.<br>
-  IntrusiveRefCntPtr<LangOptions> LangOpts;<br>
+  std::shared_ptr<LangOptions> LangOpts;<br>
<br>
   /// Options controlling the target.<br>
   IntrusiveRefCntPtr<TargetOptions> TargetOpts;<br>
@@ -68,7 +68,6 @@ protected:<br>
   /// Options controlling the preprocessor (aside from \#include handling).<br>
   IntrusiveRefCntPtr<PreprocessorOptions> PreprocessorOpts;<br>
<br>
-public:<br>
   CompilerInvocationBase();<br>
   ~CompilerInvocationBase();<br>
<br>
<br>
Modified: cfe/trunk/lib/Frontend/ASTUnit.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ASTUnit.cpp?rev=212387&r1=212386&r2=212387&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ASTUnit.cpp?rev=212387&r1=212386&r2=212387&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/lib/Frontend/ASTUnit.cpp (original)<br>
+++ cfe/trunk/lib/Frontend/ASTUnit.cpp Sun Jul  6 00:26:07 2014<br>
@@ -1087,7 +1087,7 @@ bool ASTUnit::Parse(llvm::MemoryBuffer *<br>
          "IR inputs not support here!");<br>
<br>
   // Configure the various subsystems.<br>
-  LangOpts = &Clang->getLangOpts();<br>
+  LangOpts = Clang->getInvocation().LangOpts;<br>
   FileSystemOpts = Clang->getFileSystemOpts();<br>
   IntrusiveRefCntPtr<vfs::FileSystem> VFS =<br>
       createVFSFromCompilerInvocation(Clang->getInvocation(), getDiagnostics());<br>
@@ -1709,7 +1709,7 @@ void ASTUnit::transferASTDataFromCompile<br>
   // Steal the created target, context, and preprocessor if they have been<br>
   // created.<br>
   assert(CI.hasInvocation() && "missing invocation");<br>
-  LangOpts = CI.getInvocation().getLangOpts();<br>
+  LangOpts = CI.getInvocation().LangOpts;<br>
   TheSema.reset(CI.takeSema());<br>
   Consumer.reset(CI.takeASTConsumer());<br>
   if (CI.hasASTContext())<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div></div>