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( 18 ASTContext &ASTCtx, DiagnosticsEngine &diags, const LangOptions &lang, 19 const PathDiagnosticConsumers &PDC, StoreManagerCreator storemgr, 20 ConstraintManagerCreator constraintmgr, CheckerManager *checkerMgr, 21 AnalyzerOptions &Options, CodeInjector *injector) 22 : AnaCtxMgr(ASTCtx, Options.UnoptimizedCFG, 23 Options.includeImplicitDtorsInCFG(), 24 /*AddInitializers=*/true, Options.includeTemporaryDtorsInCFG(), 25 Options.includeLifetimeInCFG(), 26 // Adding LoopExit elements to the CFG is a requirement for loop 27 // unrolling. 28 Options.includeLoopExitInCFG() || Options.shouldUnrollLoops(), 29 Options.includeScopesInCFG(), 30 Options.shouldSynthesizeBodies(), 31 Options.shouldConditionalizeStaticInitializers(), 32 /*addCXXNewAllocator=*/true, 33 Options.includeRichConstructorsInCFG(), 34 injector), 35 Ctx(ASTCtx), Diags(diags), LangOpts(lang), PathConsumers(PDC), 36 CreateStoreMgr(storemgr), CreateConstraintMgr(constraintmgr), 37 CheckerMgr(checkerMgr), options(Options) { 38 AnaCtxMgr.getCFGBuildOptions().setAllAlwaysAdd(); 39 } 40 41 AnalysisManager::~AnalysisManager() { 42 FlushDiagnostics(); 43 for (PathDiagnosticConsumers::iterator I = PathConsumers.begin(), 44 E = PathConsumers.end(); I != E; ++I) { 45 delete *I; 46 } 47 } 48 49 void AnalysisManager::FlushDiagnostics() { 50 PathDiagnosticConsumer::FilesMade filesMade; 51 for (PathDiagnosticConsumers::iterator I = PathConsumers.begin(), 52 E = PathConsumers.end(); 53 I != E; ++I) { 54 (*I)->FlushDiagnostics(&filesMade); 55 } 56 } 57