]> git.proxmox.com Git - rustc.git/blame - src/llvm/tools/clang/lib/StaticAnalyzer/Core/AnalysisManager.cpp
Imported Upstream version 0.6
[rustc.git] / src / llvm / tools / clang / lib / StaticAnalyzer / Core / AnalysisManager.cpp
CommitLineData
223e47cc
LB
1//===-- AnalysisManager.cpp -------------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h"
11
12using namespace clang;
13using namespace ento;
14
15void AnalysisManager::anchor() { }
16
17AnalysisManager::AnalysisManager(ASTContext &ctx, DiagnosticsEngine &diags,
18 const LangOptions &lang,
19 const PathDiagnosticConsumers &PDC,
20 StoreManagerCreator storemgr,
21 ConstraintManagerCreator constraintmgr,
22 CheckerManager *checkerMgr,
23 const AnalyzerOptions &Options)
24 : AnaCtxMgr(Options.UnoptimizedCFG,
25 /*AddImplicitDtors=*/true,
26 /*AddInitializers=*/true,
27 Options.includeTemporaryDtorsInCFG(),
28 Options.shouldSynthesizeBodies()),
29 Ctx(ctx),
30 Diags(diags),
31 LangOpts(lang),
32 PathConsumers(PDC),
33 CreateStoreMgr(storemgr), CreateConstraintMgr(constraintmgr),
34 CheckerMgr(checkerMgr),
35 options(Options) {
36 AnaCtxMgr.getCFGBuildOptions().setAllAlwaysAdd();
37}
38
39AnalysisManager::~AnalysisManager() {
40 FlushDiagnostics();
41 for (PathDiagnosticConsumers::iterator I = PathConsumers.begin(),
42 E = PathConsumers.end(); I != E; ++I) {
43 delete *I;
44 }
45}
46
47void AnalysisManager::FlushDiagnostics() {
48 PathDiagnosticConsumer::FilesMade filesMade;
49 for (PathDiagnosticConsumers::iterator I = PathConsumers.begin(),
50 E = PathConsumers.end();
51 I != E; ++I) {
52 (*I)->FlushDiagnostics(&filesMade);
53 }
54}