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 const AnalyzerOptions &Options) 24 : AnaCtxMgr(Options.UnoptimizedCFG, 25 Options.CFGAddImplicitDtors, 26 /*addInitializers=*/true), 27 Ctx(ctx), 28 Diags(diags), 29 LangOpts(lang), 30 PathConsumers(PDC), 31 CreateStoreMgr(storemgr), CreateConstraintMgr(constraintmgr), 32 CheckerMgr(checkerMgr), 33 options(Options) { 34 AnaCtxMgr.getCFGBuildOptions().setAllAlwaysAdd(); 35 } 36 37 AnalysisManager::~AnalysisManager() { 38 FlushDiagnostics(); 39 for (PathDiagnosticConsumers::iterator I = PathConsumers.begin(), 40 E = PathConsumers.end(); I != E; ++I) { 41 delete *I; 42 } 43 } 44 45 void AnalysisManager::FlushDiagnostics() { 46 PathDiagnosticConsumer::FilesMade filesMade; 47 for (PathDiagnosticConsumers::iterator I = PathConsumers.begin(), 48 E = PathConsumers.end(); 49 I != E; ++I) { 50 (*I)->FlushDiagnostics(&filesMade); 51 } 52 } 53