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 | b9a45a46f12640b82ae56e58faac8ddb70fd3ce4 (patch) | |
| tree | abc5b510b0387a055d292a57c2c0a2d3ae3cd786 /clang | |
| parent | 7bdf4c2cec69b697f4eeb4c9866e67d87cb0407f (diff) | |
| download | bcm5719-llvm-b9a45a46f12640b82ae56e58faac8ddb70fd3ce4.tar.gz bcm5719-llvm-b9a45a46f12640b82ae56e58faac8ddb70fd3ce4.zip  | |
now we can let AnalysisManager to own the PathDiagnosticClient.
llvm-svn: 77945
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/include/clang/Analysis/PathSensitive/AnalysisManager.h | 6 | ||||
| -rw-r--r-- | clang/lib/Frontend/AnalysisConsumer.cpp | 14 | 
2 files changed, 11 insertions, 9 deletions
diff --git a/clang/include/clang/Analysis/PathSensitive/AnalysisManager.h b/clang/include/clang/Analysis/PathSensitive/AnalysisManager.h index 2cff088ee0d..883454fd2e5 100644 --- a/clang/include/clang/Analysis/PathSensitive/AnalysisManager.h +++ b/clang/include/clang/Analysis/PathSensitive/AnalysisManager.h @@ -29,8 +29,8 @@ class AnalysisManager : public BugReporterData {    Diagnostic &Diags;    const LangOptions &LangInfo; -  PathDiagnosticClient *PD; -   +  llvm::OwningPtr<PathDiagnosticClient> PD; +    // Configurable components creators.    StoreManagerCreator CreateStoreMgr;    ConstraintManagerCreator CreateConstraintMgr; @@ -127,7 +127,7 @@ public:    }    virtual PathDiagnosticClient *getPathDiagnosticClient() { -    return PD;       +    return PD.get();          }    bool shouldVisualizeGraphviz() const { return VisualizeEGDot; } diff --git a/clang/lib/Frontend/AnalysisConsumer.cpp b/clang/lib/Frontend/AnalysisConsumer.cpp index 5af6c0112a6..1ab36907450 100644 --- a/clang/lib/Frontend/AnalysisConsumer.cpp +++ b/clang/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) {  | 

