AnalysisManager.cpp revision 255d4d4226b24036ceb11228fbb74286e58620f7
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, 25255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek Options.CFGAddImplicitDtors, 26255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek /*addInitializers=*/true), 27255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek Ctx(ctx), 28255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek Diags(diags), 29255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek LangOpts(lang), 30c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek PathConsumers(PDC), 314fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek CreateStoreMgr(storemgr), CreateConstraintMgr(constraintmgr), 327b73e0832b20af1f43601a3d19e76d02d9f4dce5Ted Kremenek CheckerMgr(checkerMgr), 33255d4d4226b24036ceb11228fbb74286e58620f7Ted Kremenek options(Options) { 34882998923889a2fcce9b49696506c499e22cf38fTed Kremenek AnaCtxMgr.getCFGBuildOptions().setAllAlwaysAdd(); 354fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek} 364fed22cdd8bb7d98127853ebb3f42be66bf2ce59Ted Kremenek 37c4bac8e376b98d633bb00ee5f510d5e58449753cTed KremenekAnalysisManager::~AnalysisManager() { 38c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek FlushDiagnostics(); 39c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek for (PathDiagnosticConsumers::iterator I = PathConsumers.begin(), 40c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek E = PathConsumers.end(); I != E; ++I) { 41c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek delete *I; 42c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek } 43c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek} 44c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek 45c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenekvoid AnalysisManager::FlushDiagnostics() { 46c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek PathDiagnosticConsumer::FilesMade filesMade; 47c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek for (PathDiagnosticConsumers::iterator I = PathConsumers.begin(), 48c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek E = PathConsumers.end(); 49c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek I != E; ++I) { 50c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek (*I)->FlushDiagnostics(&filesMade); 51c4bac8e376b98d633bb00ee5f510d5e58449753cTed Kremenek } 52d30952838421ddfb9f7e346b2ba8213889a5f789Anna Zaks} 53