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, 23255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek const AnalyzerOptions &Options) 24255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek : AnaCtxMgr(Options.UnoptimizedCFG, 255a1ffe98b04120846a15f7105905b5f363b08635Jordan Rose /*AddImplicitDtors=*/true, 265a1ffe98b04120846a15f7105905b5f363b08635Jordan Rose /*AddInitializers=*/true, 275a1ffe98b04120846a15f7105905b5f363b08635Jordan Rose Options.includeTemporaryDtorsInCFG()), 28255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek Ctx(ctx), 29255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek Diags(diags), 30255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek LangOpts(lang), 31c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek PathConsumers(PDC), 324fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek CreateStoreMgr(storemgr), CreateConstraintMgr(constraintmgr), 337b73e0832b20af1f43601a3d19e76d02d9f4dce5Ted Kremenek CheckerMgr(checkerMgr), 34255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek options(Options) { 35882998923889a2fcce9b49696506c499e22cf38fTed Kremenek AnaCtxMgr.getCFGBuildOptions().setAllAlwaysAdd(); 364fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek} 374fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek 38c4bac8e376b98d633bb00ee5f510d5e58449753cTed KremenekAnalysisManager::~AnalysisManager() { 39c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek FlushDiagnostics(); 40c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek for (PathDiagnosticConsumers::iterator I = PathConsumers.begin(), 41c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek E = PathConsumers.end(); I != E; ++I) { 42c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek delete *I; 43c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek } 44c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek} 45c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek 46c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenekvoid AnalysisManager::FlushDiagnostics() { 47c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek PathDiagnosticConsumer::FilesMade filesMade; 48c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek for (PathDiagnosticConsumers::iterator I = PathConsumers.begin(), 49c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek E = PathConsumers.end(); 50c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek I != E; ++I) { 51c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek (*I)->FlushDiagnostics(&filesMade); 52c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek } 53d30952838421ddfb9f7e346b2ba8213889a5f789Anna Zaks} 54