diff options
author | Zhongxing Xu <xuzhongxing@gmail.com> | 2009-08-03 03:27:37 +0000 |
---|---|---|
committer | Zhongxing Xu <xuzhongxing@gmail.com> | 2009-08-03 03:27:37 +0000 |
commit | d07a0d0279c09d1017f8450fce575a94dc9703c0 (patch) | |
tree | 92952a58eada34864eb7fbe3706278598a6132bd /lib/Frontend/AnalysisConsumer.cpp | |
parent | c471e7b44e63ff1b46b480e723c4130aeaef5a8a (diff) |
now we can let AnalysisManager to own the PathDiagnosticClient.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@77945 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend/AnalysisConsumer.cpp')
-rw-r--r-- | lib/Frontend/AnalysisConsumer.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/lib/Frontend/AnalysisConsumer.cpp b/lib/Frontend/AnalysisConsumer.cpp index 5af6c0112a..1ab3690745 100644 --- a/lib/Frontend/AnalysisConsumer.cpp +++ b/lib/Frontend/AnalysisConsumer.cpp @@ -84,7 +84,10 @@ namespace { 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 @@ namespace { 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 @@ namespace { 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::HandleTopLevelSingleDecl(Decl *D) { } void AnalysisConsumer::HandleTranslationUnit(ASTContext &C) { - if(!TranslationUnitActions.empty()) { for (Actions::iterator I = TranslationUnitActions.begin(), E = TranslationUnitActions.end(); I != E; ++I) @@ -237,11 +239,11 @@ void AnalysisConsumer::HandleTranslationUnit(ASTContext &C) { 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) { |