Home | History | Annotate | Download | only in Core
      1 //===-- AnalysisManager.cpp -------------------------------------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 #include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h"
     11 
     12 using namespace clang;
     13 using namespace ento;
     14 
     15 void AnalysisManager::anchor() { }
     16 
     17 AnalysisManager::AnalysisManager(ASTContext &ctx, DiagnosticsEngine &diags,
     18                                  const LangOptions &lang,
     19                                  const PathDiagnosticConsumers &PDC,
     20                                  StoreManagerCreator storemgr,
     21                                  ConstraintManagerCreator constraintmgr,
     22                                  CheckerManager *checkerMgr,
     23                                  AnalyzerOptions &Options)
     24   : AnaCtxMgr(Options.UnoptimizedCFG,
     25               /*AddImplicitDtors=*/true,
     26               /*AddInitializers=*/true,
     27               Options.includeTemporaryDtorsInCFG(),
     28               Options.shouldSynthesizeBodies()),
     29     Ctx(ctx),
     30     Diags(diags),
     31     LangOpts(lang),
     32     PathConsumers(PDC),
     33     CreateStoreMgr(storemgr), CreateConstraintMgr(constraintmgr),
     34     CheckerMgr(checkerMgr),
     35     options(Options) {
     36   AnaCtxMgr.getCFGBuildOptions().setAllAlwaysAdd();
     37 }
     38 
     39 AnalysisManager::~AnalysisManager() {
     40   FlushDiagnostics();
     41   for (PathDiagnosticConsumers::iterator I = PathConsumers.begin(),
     42        E = PathConsumers.end(); I != E; ++I) {
     43     delete *I;
     44   }
     45 }
     46 
     47 void AnalysisManager::FlushDiagnostics() {
     48   PathDiagnosticConsumer::FilesMade filesMade;
     49   for (PathDiagnosticConsumers::iterator I = PathConsumers.begin(),
     50        E = PathConsumers.end();
     51        I != E; ++I) {
     52     (*I)->FlushDiagnostics(&filesMade);
     53   }
     54 }
     55