diff options
author | Zhongxing Xu <xuzhongxing@gmail.com> | 2009-08-03 03:13:46 +0000 |
---|---|---|
committer | Zhongxing Xu <xuzhongxing@gmail.com> | 2009-08-03 03:13:46 +0000 |
commit | c471e7b44e63ff1b46b480e723c4130aeaef5a8a (patch) | |
tree | a7b526862868e3470b67e12764f36834371ebfdd /lib/Frontend/AnalysisConsumer.cpp | |
parent | 2e3124486f343d770a2a5c2b7e78268bfc328a58 (diff) |
Create only one AnalysisManager for each translation unit. In HandleCode(),
reset the current analysis context of the AnalysisManager.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77943 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend/AnalysisConsumer.cpp')
-rw-r--r-- | lib/Frontend/AnalysisConsumer.cpp | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/lib/Frontend/AnalysisConsumer.cpp b/lib/Frontend/AnalysisConsumer.cpp index 44d79be11c..5af6c0112a 100644 --- a/lib/Frontend/AnalysisConsumer.cpp +++ b/lib/Frontend/AnalysisConsumer.cpp @@ -88,6 +88,8 @@ namespace { StoreManagerCreator CreateStoreMgr; ConstraintManagerCreator CreateConstraintMgr; + llvm::OwningPtr<AnalysisManager> Mgr; + AnalysisConsumer(Diagnostic &diags, Preprocessor* pp, PreprocessorFactory* ppf, const LangOptions& lopts, @@ -152,6 +154,12 @@ namespace { 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::HandleTopLevelSingleDecl(Decl *D) { 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 @@ void AnalysisConsumer::HandleCode(Decl* D, Stmt* Body, Actions& actions) { !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); } //===----------------------------------------------------------------------===// |