1c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu//===-- AnalysisManager.cpp -------------------------------------*- C++ -*-===// 2c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu// 3c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu// The LLVM Compiler Infrastructure 4c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu// 5c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu// This file is distributed under the University of Illinois Open Source 6c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu// License. See LICENSE.TXT for details. 7c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu// 8c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu//===----------------------------------------------------------------------===// 9c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu 109b663716449b618ba0390b1dbebc54fa8e971124Ted Kremenek#include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h" 11c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu 12c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xuusing namespace clang; 139ef6537a894c33003359b1f9b9676e9178e028b7Ted Kremenekusing namespace ento; 14c6238d2786cfd961b94580b3d3675a1b3ff0721cZhongxing Xu 1599ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikievoid AnalysisManager::anchor() { } 1699ba9e3bd70671f3441fb974895f226a83ce0e66David Blaikie 17d6471f7c1921c7802804ce3ff6fe9768310f72b9David BlaikieAnalysisManager::AnalysisManager(ASTContext &ctx, DiagnosticsEngine &diags, 18ef3643fbbbf66247c5e205497fae0f46e240c143David Blaikie const LangOptions &lang, 19c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek const PathDiagnosticConsumers &PDC, 204fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek StoreManagerCreator storemgr, 214fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek ConstraintManagerCreator constraintmgr, 224fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek CheckerManager *checkerMgr, 23622b6fb0a1d280c16e135c7e427b79cafffbde1fTed Kremenek AnalyzerOptions &Options) 24255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek : AnaCtxMgr(Options.UnoptimizedCFG, 255a1ffe98b04120846a15f7105905b5f363b08635Jordan Rose /*AddImplicitDtors=*/true, 265a1ffe98b04120846a15f7105905b5f363b08635Jordan Rose /*AddInitializers=*/true, 27a43df9539644bf1c258e12710cd69d79b0b078cdTed Kremenek Options.includeTemporaryDtorsInCFG(), 2802a88c3edf1aeb9580e0b6e444b30c52846a673cTed Kremenek Options.shouldSynthesizeBodies(), 2902a88c3edf1aeb9580e0b6e444b30c52846a673cTed Kremenek Options.shouldConditionalizeStaticInitializers()), 30255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek Ctx(ctx), 31255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek Diags(diags), 32255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek LangOpts(lang), 33c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek PathConsumers(PDC), 344fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek CreateStoreMgr(storemgr), CreateConstraintMgr(constraintmgr), 357b73e0832b20af1f43601a3d19e76d02d9f4dce5Ted Kremenek CheckerMgr(checkerMgr), 36255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek options(Options) { 37882998923889a2fcce9b49696506c499e22cf38fTed Kremenek AnaCtxMgr.getCFGBuildOptions().setAllAlwaysAdd(); 384fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek} 394fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek 40c4bac8e376b98d633bb00ee5f510d5e58449753cTed KremenekAnalysisManager::~AnalysisManager() { 41c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek FlushDiagnostics(); 42c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek for (PathDiagnosticConsumers::iterator I = PathConsumers.begin(), 43c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek E = PathConsumers.end(); I != E; ++I) { 44c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek delete *I; 45c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek } 46c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek} 47c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek 48c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenekvoid AnalysisManager::FlushDiagnostics() { 49c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek PathDiagnosticConsumer::FilesMade filesMade; 50c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek for (PathDiagnosticConsumers::iterator I = PathConsumers.begin(), 51c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek E = PathConsumers.end(); 52c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek I != E; ++I) { 53c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek (*I)->FlushDiagnostics(&filesMade); 54c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek } 55d30952838421ddfb9f7e346b2ba8213889a5f789Anna Zaks} 56