[cfe-commits] r77945 - in /cfe/trunk: include/clang/Analysis/PathSensitive/AnalysisManager.h lib/Frontend/AnalysisConsumer.cpp

Zhongxing Xu xuzhongxing at gmail.com
Sun Aug 2 20:27:37 PDT 2009


Author: zhongxingxu
Date: Sun Aug  2 22:27:37 2009
New Revision: 77945

URL: http://llvm.org/viewvc/llvm-project?rev=77945&view=rev
Log:
now we can let AnalysisManager to own the PathDiagnosticClient.

Modified:
    cfe/trunk/include/clang/Analysis/PathSensitive/AnalysisManager.h
    cfe/trunk/lib/Frontend/AnalysisConsumer.cpp

Modified: cfe/trunk/include/clang/Analysis/PathSensitive/AnalysisManager.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/PathSensitive/AnalysisManager.h?rev=77945&r1=77944&r2=77945&view=diff

==============================================================================
--- cfe/trunk/include/clang/Analysis/PathSensitive/AnalysisManager.h (original)
+++ cfe/trunk/include/clang/Analysis/PathSensitive/AnalysisManager.h Sun Aug  2 22:27:37 2009
@@ -29,8 +29,8 @@
   Diagnostic &Diags;
   const LangOptions &LangInfo;
 
-  PathDiagnosticClient *PD;
-  
+  llvm::OwningPtr<PathDiagnosticClient> PD;
+
   // Configurable components creators.
   StoreManagerCreator CreateStoreMgr;
   ConstraintManagerCreator CreateConstraintMgr;
@@ -127,7 +127,7 @@
   }
     
   virtual PathDiagnosticClient *getPathDiagnosticClient() {
-    return PD;      
+    return PD.get();      
   }
     
   bool shouldVisualizeGraphviz() const { return VisualizeEGDot; }

Modified: cfe/trunk/lib/Frontend/AnalysisConsumer.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/AnalysisConsumer.cpp?rev=77945&r1=77944&r2=77945&view=diff

==============================================================================
--- cfe/trunk/lib/Frontend/AnalysisConsumer.cpp (original)
+++ cfe/trunk/lib/Frontend/AnalysisConsumer.cpp Sun Aug  2 22:27:37 2009
@@ -84,7 +84,10 @@
     const std::string OutDir;
     AnalyzerOptions Opts;
 
-    llvm::OwningPtr<PathDiagnosticClient> PD;
+
+    // PD is owned by AnalysisManager.
+    PathDiagnosticClient *PD;
+
     StoreManagerCreator CreateStoreMgr;
     ConstraintManagerCreator CreateConstraintMgr;
 
@@ -107,7 +110,7 @@
         switch (Opts.AnalysisDiagOpt) {
         default:
 #define ANALYSIS_DIAGNOSTICS(NAME, CMDFLAG, DESC, CREATEFN, AUTOCREATE) \
-          case PD_##NAME: PD.reset(CREATEFN(OutDir, PP, PPF)); break;
+          case PD_##NAME: PD = CREATEFN(OutDir, PP, PPF); break;
 #include "clang/Frontend/Analyses.def"
         }
       }
@@ -154,7 +157,7 @@
     
     virtual void Initialize(ASTContext &Context) {
       Ctx = &Context;
-      Mgr.reset(new AnalysisManager(*Ctx, Diags, LOpts, PD.get(), 
+      Mgr.reset(new AnalysisManager(*Ctx, Diags, LOpts, PD, 
                                     CreateStoreMgr, CreateConstraintMgr,
                                     Opts.AnalyzerDisplayProgress, 
                                     Opts.VisualizeEGDot, Opts.VisualizeEGUbi, 
@@ -221,7 +224,6 @@
 }
 
 void AnalysisConsumer::HandleTranslationUnit(ASTContext &C) {
-
   if(!TranslationUnitActions.empty()) {
     for (Actions::iterator I = TranslationUnitActions.begin(), 
          E = TranslationUnitActions.end(); I != E; ++I)
@@ -237,11 +239,11 @@
       if (ObjCImplementationDecl* ID = dyn_cast<ObjCImplementationDecl>(*I))
         HandleCode(ID, 0, ObjCImplementationActions);
   }
-  
+
   // Explicitly destroy the PathDiagnosticClient.  This will flush its output.
   // FIXME: This should be replaced with something that doesn't rely on
   // side-effects in PathDiagnosticClient's destructor.
-  PD.reset(NULL);
+  Mgr.reset(NULL);
 }
 
 void AnalysisConsumer::HandleCode(Decl* D, Stmt* Body, Actions& actions) {





More information about the cfe-commits mailing list