1218887Sdim//===-- AnalysisManager.cpp -------------------------------------*- C++ -*-===// 2218887Sdim// 3218887Sdim// The LLVM Compiler Infrastructure 4218887Sdim// 5218887Sdim// This file is distributed under the University of Illinois Open Source 6218887Sdim// License. See LICENSE.TXT for details. 7218887Sdim// 8218887Sdim//===----------------------------------------------------------------------===// 9218887Sdim 10218887Sdim#include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h" 11218887Sdim 12218887Sdimusing namespace clang; 13218887Sdimusing namespace ento; 14218887Sdim 15234353Sdimvoid AnalysisManager::anchor() { } 16234353Sdim 17226633SdimAnalysisManager::AnalysisManager(ASTContext &ctx, DiagnosticsEngine &diags, 18226633Sdim const LangOptions &lang, 19239462Sdim const PathDiagnosticConsumers &PDC, 20226633Sdim StoreManagerCreator storemgr, 21226633Sdim ConstraintManagerCreator constraintmgr, 22226633Sdim CheckerManager *checkerMgr, 23243830Sdim AnalyzerOptions &Options) 24243830Sdim : AnaCtxMgr(Options.UnoptimizedCFG, 25243830Sdim /*AddImplicitDtors=*/true, 26243830Sdim /*AddInitializers=*/true, 27243830Sdim Options.includeTemporaryDtorsInCFG(), 28249423Sdim Options.shouldSynthesizeBodies(), 29249423Sdim Options.shouldConditionalizeStaticInitializers()), 30243830Sdim Ctx(ctx), 31243830Sdim Diags(diags), 32243830Sdim LangOpts(lang), 33239462Sdim PathConsumers(PDC), 34226633Sdim CreateStoreMgr(storemgr), CreateConstraintMgr(constraintmgr), 35243830Sdim CheckerMgr(checkerMgr), 36243830Sdim options(Options) { 37226633Sdim AnaCtxMgr.getCFGBuildOptions().setAllAlwaysAdd(); 38226633Sdim} 39226633Sdim 40239462SdimAnalysisManager::~AnalysisManager() { 41239462Sdim FlushDiagnostics(); 42239462Sdim for (PathDiagnosticConsumers::iterator I = PathConsumers.begin(), 43239462Sdim E = PathConsumers.end(); I != E; ++I) { 44239462Sdim delete *I; 45239462Sdim } 46226633Sdim} 47239462Sdim 48239462Sdimvoid AnalysisManager::FlushDiagnostics() { 49239462Sdim PathDiagnosticConsumer::FilesMade filesMade; 50239462Sdim for (PathDiagnosticConsumers::iterator I = PathConsumers.begin(), 51239462Sdim E = PathConsumers.end(); 52239462Sdim I != E; ++I) { 53239462Sdim (*I)->FlushDiagnostics(&filesMade); 54239462Sdim } 55239462Sdim} 56