AnalysisManager.cpp revision 5a1ffe98b04120846a15f7105905b5f363b08635
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