57 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8 9#include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h"10 11using namespace clang;12using namespace ento;13 14void AnalysisManager::anchor() { }15 16AnalysisManager::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 loop29 // 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 47AnalysisManager::~AnalysisManager() {48 FlushDiagnostics();49}50 51void AnalysisManager::FlushDiagnostics() {52 PathDiagnosticConsumer::FilesMade filesMade;53 for (const auto &Consumer : PathConsumers) {54 Consumer->FlushDiagnostics(&filesMade);55 }56}57