xref: /freebsd/contrib/llvm-project/clang/lib/StaticAnalyzer/Core/AnalysisManager.cpp (revision 700637cbb5e582861067a11aaca4d053546871d2)
1 //===-- AnalysisManager.cpp -------------------------------------*- C++ -*-===//
2 //
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
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h"
10 
11 using namespace clang;
12 using namespace ento;
13 
anchor()14 void AnalysisManager::anchor() { }
15 
AnalysisManager(ASTContext & ASTCtx,Preprocessor & PP,PathDiagnosticConsumers PDC,StoreManagerCreator storemgr,ConstraintManagerCreator constraintmgr,CheckerManager * checkerMgr,AnalyzerOptions & Options,std::unique_ptr<CodeInjector> injector)16 AnalysisManager::AnalysisManager(ASTContext &ASTCtx, Preprocessor &PP,
17                                  PathDiagnosticConsumers PDC,
18                                  StoreManagerCreator storemgr,
19                                  ConstraintManagerCreator constraintmgr,
20                                  CheckerManager *checkerMgr,
21                                  AnalyzerOptions &Options,
22                                  std::unique_ptr<CodeInjector> injector)
23     : AnaCtxMgr(
24           ASTCtx, Options.UnoptimizedCFG,
25           Options.ShouldIncludeImplicitDtorsInCFG,
26           /*addInitializers=*/true, Options.ShouldIncludeTemporaryDtorsInCFG,
27           Options.ShouldIncludeLifetimeInCFG,
28           // Adding LoopExit elements to the CFG is a requirement for loop
29           // unrolling.
30           Options.ShouldIncludeLoopExitInCFG || Options.ShouldUnrollLoops,
31           Options.ShouldIncludeScopesInCFG, Options.ShouldSynthesizeBodies,
32           Options.ShouldConditionalizeStaticInitializers,
33           /*addCXXNewAllocator=*/true,
34           Options.ShouldIncludeRichConstructorsInCFG,
35           Options.ShouldElideConstructors,
36           /*addVirtualBaseBranches=*/true, std::move(injector)),
37       Ctx(ASTCtx), PP(PP), LangOpts(ASTCtx.getLangOpts()),
38       PathConsumers(std::move(PDC)), CreateStoreMgr(storemgr),
39       CreateConstraintMgr(constraintmgr), CheckerMgr(checkerMgr),
40       options(Options) {
41   AnaCtxMgr.getCFGBuildOptions().setAllAlwaysAdd();
42   AnaCtxMgr.getCFGBuildOptions().OmitImplicitValueInitializers = true;
43   AnaCtxMgr.getCFGBuildOptions().AddCXXDefaultInitExprInAggregates =
44       Options.ShouldIncludeDefaultInitForAggregates;
45 }
46 
~AnalysisManager()47 AnalysisManager::~AnalysisManager() {
48   FlushDiagnostics();
49 }
50 
FlushDiagnostics()51 void AnalysisManager::FlushDiagnostics() {
52   PathDiagnosticConsumer::FilesMade filesMade;
53   for (const auto &Consumer : PathConsumers) {
54     Consumer->FlushDiagnostics(&filesMade);
55   }
56 }
57