1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | #include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h" |
10 | |
11 | using namespace clang; |
12 | using namespace ento; |
13 | |
14 | void AnalysisManager::anchor() { } |
15 | |
16 | AnalysisManager::AnalysisManager(ASTContext &ASTCtx, DiagnosticsEngine &diags, |
17 | const PathDiagnosticConsumers &PDC, |
18 | StoreManagerCreator storemgr, |
19 | ConstraintManagerCreator constraintmgr, |
20 | CheckerManager *checkerMgr, |
21 | AnalyzerOptions &Options, |
22 | CodeInjector *injector) |
23 | : AnaCtxMgr( |
24 | ASTCtx, Options.UnoptimizedCFG, |
25 | Options.ShouldIncludeImplicitDtorsInCFG, |
26 | , |
27 | Options.ShouldIncludeTemporaryDtorsInCFG, |
28 | Options.ShouldIncludeLifetimeInCFG, |
29 | |
30 | |
31 | Options.ShouldIncludeLoopExitInCFG || |
32 | Options.ShouldUnrollLoops, |
33 | Options.ShouldIncludeScopesInCFG, |
34 | Options.ShouldSynthesizeBodies, |
35 | Options.ShouldConditionalizeStaticInitializers, |
36 | , |
37 | Options.ShouldIncludeRichConstructorsInCFG, |
38 | Options.ShouldElideConstructors, injector), |
39 | Ctx(ASTCtx), Diags(diags), LangOpts(ASTCtx.getLangOpts()), |
40 | PathConsumers(PDC), CreateStoreMgr(storemgr), |
41 | CreateConstraintMgr(constraintmgr), CheckerMgr(checkerMgr), |
42 | options(Options) { |
43 | AnaCtxMgr.getCFGBuildOptions().setAllAlwaysAdd(); |
44 | } |
45 | |
46 | AnalysisManager::~AnalysisManager() { |
47 | FlushDiagnostics(); |
48 | for (PathDiagnosticConsumers::iterator I = PathConsumers.begin(), |
49 | E = PathConsumers.end(); I != E; ++I) { |
50 | delete *I; |
51 | } |
52 | } |
53 | |
54 | void AnalysisManager::FlushDiagnostics() { |
55 | PathDiagnosticConsumer::FilesMade filesMade; |
56 | for (PathDiagnosticConsumers::iterator I = PathConsumers.begin(), |
57 | E = PathConsumers.end(); |
58 | I != E; ++I) { |
59 | (*I)->FlushDiagnostics(&filesMade); |
60 | } |
61 | } |
62 | |