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