1fa0734ecSArgyrios Kyrtzidis //===-- AnalysisManager.cpp -------------------------------------*- C++ -*-===//
2fa0734ecSArgyrios Kyrtzidis //
32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6fa0734ecSArgyrios Kyrtzidis //
7fa0734ecSArgyrios Kyrtzidis //===----------------------------------------------------------------------===//
8fa0734ecSArgyrios Kyrtzidis
9f8cbac4bSTed Kremenek #include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h"
10fa0734ecSArgyrios Kyrtzidis
11fa0734ecSArgyrios Kyrtzidis using namespace clang;
12fa0734ecSArgyrios Kyrtzidis using namespace ento;
13fa0734ecSArgyrios Kyrtzidis
anchor()1468e081d6SDavid Blaikie void AnalysisManager::anchor() { }
1568e081d6SDavid Blaikie
AnalysisManager(ASTContext & ASTCtx,Preprocessor & PP,const PathDiagnosticConsumers & PDC,StoreManagerCreator storemgr,ConstraintManagerCreator constraintmgr,CheckerManager * checkerMgr,AnalyzerOptions & Options,CodeInjector * injector)16*38ab3b87SCharusso AnalysisManager::AnalysisManager(ASTContext &ASTCtx, Preprocessor &PP,
174ece68a0SGeorge Karpenkov const PathDiagnosticConsumers &PDC,
184ece68a0SGeorge Karpenkov StoreManagerCreator storemgr,
194ece68a0SGeorge Karpenkov ConstraintManagerCreator constraintmgr,
204ece68a0SGeorge Karpenkov CheckerManager *checkerMgr,
214ece68a0SGeorge Karpenkov AnalyzerOptions &Options,
224ece68a0SGeorge Karpenkov CodeInjector *injector)
234ece68a0SGeorge Karpenkov : AnaCtxMgr(
24549f9cd4SKristof Umann ASTCtx, Options.UnoptimizedCFG,
25549f9cd4SKristof Umann Options.ShouldIncludeImplicitDtorsInCFG,
2649a3ad21SRui Ueyama /*addInitializers=*/true,
27549f9cd4SKristof Umann Options.ShouldIncludeTemporaryDtorsInCFG,
28549f9cd4SKristof Umann Options.ShouldIncludeLifetimeInCFG,
29d91554bcSPeter Szecsi // Adding LoopExit elements to the CFG is a requirement for loop
30d91554bcSPeter Szecsi // unrolling.
31549f9cd4SKristof Umann Options.ShouldIncludeLoopExitInCFG ||
32549f9cd4SKristof Umann Options.ShouldUnrollLoops,
33549f9cd4SKristof Umann Options.ShouldIncludeScopesInCFG,
34549f9cd4SKristof Umann Options.ShouldSynthesizeBodies,
35549f9cd4SKristof Umann Options.ShouldConditionalizeStaticInitializers,
36549f9cd4SKristof Umann /*addCXXNewAllocator=*/true,
37549f9cd4SKristof Umann Options.ShouldIncludeRichConstructorsInCFG,
38192a7474SArtem Dergachev Options.ShouldElideConstructors,
39192a7474SArtem Dergachev /*addVirtualBaseBranches=*/true,
40192a7474SArtem Dergachev injector),
41*38ab3b87SCharusso Ctx(ASTCtx), PP(PP), LangOpts(ASTCtx.getLangOpts()),
424ece68a0SGeorge Karpenkov PathConsumers(PDC), CreateStoreMgr(storemgr),
434ece68a0SGeorge Karpenkov CreateConstraintMgr(constraintmgr), CheckerMgr(checkerMgr),
444ece68a0SGeorge Karpenkov options(Options) {
45e9fda1e4STed Kremenek AnaCtxMgr.getCFGBuildOptions().setAllAlwaysAdd();
469fdcae7cSGabor Horvath AnaCtxMgr.getCFGBuildOptions().OmitImplicitValueInitializers = true;
47ea93d7d6SGabor Horvath AnaCtxMgr.getCFGBuildOptions().AddCXXDefaultInitExprInAggregates =
48ea93d7d6SGabor Horvath Options.ShouldIncludeDefaultInitForAggregates;
4986070b9cSTed Kremenek }
5086070b9cSTed Kremenek
~AnalysisManager()519bf9af92STed Kremenek AnalysisManager::~AnalysisManager() {
529bf9af92STed Kremenek FlushDiagnostics();
539bf9af92STed Kremenek for (PathDiagnosticConsumers::iterator I = PathConsumers.begin(),
549bf9af92STed Kremenek E = PathConsumers.end(); I != E; ++I) {
559bf9af92STed Kremenek delete *I;
569bf9af92STed Kremenek }
579bf9af92STed Kremenek }
589bf9af92STed Kremenek
FlushDiagnostics()599bf9af92STed Kremenek void AnalysisManager::FlushDiagnostics() {
609bf9af92STed Kremenek PathDiagnosticConsumer::FilesMade filesMade;
619bf9af92STed Kremenek for (PathDiagnosticConsumers::iterator I = PathConsumers.begin(),
629bf9af92STed Kremenek E = PathConsumers.end();
639bf9af92STed Kremenek I != E; ++I) {
649bf9af92STed Kremenek (*I)->FlushDiagnostics(&filesMade);
659bf9af92STed Kremenek }
668d4c8e14SAnna Zaks }
67