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

Zhongxing Xu xuzhongxing at gmail.com
Sun Aug 2 20:13:58 PDT 2009


Author: zhongxingxu
Date: Sun Aug  2 22:13:46 2009
New Revision: 77943

URL: http://llvm.org/viewvc/llvm-project?rev=77943&view=rev
Log:
Create only one AnalysisManager for each translation unit. In HandleCode(),
reset the current analysis context of the AnalysisManager.

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=77943&r1=77942&r2=77943&view=diff

==============================================================================
--- cfe/trunk/include/clang/Analysis/PathSensitive/AnalysisManager.h (original)
+++ cfe/trunk/include/clang/Analysis/PathSensitive/AnalysisManager.h Sun Aug  2 22:13:46 2009
@@ -75,6 +75,10 @@
 
     CurrentContext = 0;
   }
+
+  void setContext(Decl *D) {
+    CurrentContext = ContextMgr.getContext(D);
+  }
     
   Decl *getCodeDecl() const { 
     assert (AScope == ScopeDecl);

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

==============================================================================
--- cfe/trunk/lib/Frontend/AnalysisConsumer.cpp (original)
+++ cfe/trunk/lib/Frontend/AnalysisConsumer.cpp Sun Aug  2 22:13:46 2009
@@ -88,6 +88,8 @@
     StoreManagerCreator CreateStoreMgr;
     ConstraintManagerCreator CreateConstraintMgr;
 
+    llvm::OwningPtr<AnalysisManager> Mgr;
+
     AnalysisConsumer(Diagnostic &diags, Preprocessor* pp,
                      PreprocessorFactory* ppf,
                      const LangOptions& lopts,
@@ -152,6 +154,12 @@
     
     virtual void Initialize(ASTContext &Context) {
       Ctx = &Context;
+      Mgr.reset(new AnalysisManager(*Ctx, Diags, LOpts, PD.get(), 
+                                    CreateStoreMgr, CreateConstraintMgr,
+                                    Opts.AnalyzerDisplayProgress, 
+                                    Opts.VisualizeEGDot, Opts.VisualizeEGUbi, 
+                                    Opts.PurgeDead, Opts.EagerlyAssume,
+                                    Opts.TrimGraph));
     }
     
     virtual void HandleTopLevelDecl(DeclGroupRef D) {
@@ -215,14 +223,9 @@
 void AnalysisConsumer::HandleTranslationUnit(ASTContext &C) {
 
   if(!TranslationUnitActions.empty()) {
-    AnalysisManager mgr(*Ctx, Diags, LOpts, PD.get(), 
-                        CreateStoreMgr, CreateConstraintMgr,
-                        Opts.AnalyzerDisplayProgress, Opts.VisualizeEGDot,
-                        Opts.VisualizeEGUbi, Opts.PurgeDead, Opts.EagerlyAssume,
-                        Opts.TrimGraph);
     for (Actions::iterator I = TranslationUnitActions.begin(), 
          E = TranslationUnitActions.end(); I != E; ++I)
-      (*I)(mgr);  
+      (*I)(*Mgr);  
   }
 
   if (!ObjCImplementationActions.empty()) {
@@ -253,17 +256,11 @@
       !Ctx->getSourceManager().isFromMainFile(D->getLocation()))
     return;  
 
-  // Create an AnalysisManager that will manage the state for analyzing
-  // this method/function.
-  AnalysisManager mgr(D, *Ctx, Diags, LOpts, PD.get(), 
-                      CreateStoreMgr, CreateConstraintMgr,
-                      Opts.AnalyzerDisplayProgress, Opts.VisualizeEGDot,
-                      Opts.VisualizeEGUbi, Opts.PurgeDead, Opts.EagerlyAssume,
-                      Opts.TrimGraph);
+  Mgr->setContext(D);
   
   // Dispatch on the actions.  
   for (Actions::iterator I = actions.begin(), E = actions.end(); I != E; ++I)
-    (*I)(mgr);  
+    (*I)(*Mgr);  
 }
 
 //===----------------------------------------------------------------------===//





More information about the cfe-commits mailing list