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