1 //===-- AnalysisManager.cpp -------------------------------------*- C++ -*-===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 #include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h"
11 using namespace clang
;
14 void AnalysisManager::anchor() { }
16 AnalysisManager::AnalysisManager(ASTContext
&ASTCtx
, Preprocessor
&PP
,
17 const PathDiagnosticConsumers
&PDC
,
18 StoreManagerCreator storemgr
,
19 ConstraintManagerCreator constraintmgr
,
20 CheckerManager
*checkerMgr
,
21 AnalyzerOptions
&Options
,
22 CodeInjector
*injector
)
24 ASTCtx
, Options
.UnoptimizedCFG
,
25 Options
.ShouldIncludeImplicitDtorsInCFG
,
26 /*addInitializers=*/true,
27 Options
.ShouldIncludeTemporaryDtorsInCFG
,
28 Options
.ShouldIncludeLifetimeInCFG
,
29 // Adding LoopExit elements to the CFG is a requirement for loop
31 Options
.ShouldIncludeLoopExitInCFG
||
32 Options
.ShouldUnrollLoops
,
33 Options
.ShouldIncludeScopesInCFG
,
34 Options
.ShouldSynthesizeBodies
,
35 Options
.ShouldConditionalizeStaticInitializers
,
36 /*addCXXNewAllocator=*/true,
37 Options
.ShouldIncludeRichConstructorsInCFG
,
38 Options
.ShouldElideConstructors
,
39 /*addVirtualBaseBranches=*/true,
41 Ctx(ASTCtx
), PP(PP
), LangOpts(ASTCtx
.getLangOpts()),
42 PathConsumers(PDC
), CreateStoreMgr(storemgr
),
43 CreateConstraintMgr(constraintmgr
), CheckerMgr(checkerMgr
),
45 AnaCtxMgr
.getCFGBuildOptions().setAllAlwaysAdd();
46 AnaCtxMgr
.getCFGBuildOptions().OmitImplicitValueInitializers
= true;
47 AnaCtxMgr
.getCFGBuildOptions().AddCXXDefaultInitExprInAggregates
=
48 Options
.ShouldIncludeDefaultInitForAggregates
;
51 AnalysisManager::~AnalysisManager() {
53 for (PathDiagnosticConsumer
*Consumer
: PathConsumers
) {
58 void AnalysisManager::FlushDiagnostics() {
59 PathDiagnosticConsumer::FilesMade filesMade
;
60 for (PathDiagnosticConsumer
*Consumer
: PathConsumers
) {
61 Consumer
->FlushDiagnostics(&filesMade
);