123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- //===-- AnalysisManager.cpp -------------------------------------*- C++ -*-===//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- #include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h"
- using namespace clang;
- using namespace ento;
- void AnalysisManager::anchor() { }
- AnalysisManager::AnalysisManager(ASTContext &ASTCtx, Preprocessor &PP,
- const PathDiagnosticConsumers &PDC,
- StoreManagerCreator storemgr,
- ConstraintManagerCreator constraintmgr,
- CheckerManager *checkerMgr,
- AnalyzerOptions &Options,
- CodeInjector *injector)
- : AnaCtxMgr(
- ASTCtx, Options.UnoptimizedCFG,
- Options.ShouldIncludeImplicitDtorsInCFG,
- /*addInitializers=*/true,
- Options.ShouldIncludeTemporaryDtorsInCFG,
- Options.ShouldIncludeLifetimeInCFG,
- // Adding LoopExit elements to the CFG is a requirement for loop
- // unrolling.
- Options.ShouldIncludeLoopExitInCFG ||
- Options.ShouldUnrollLoops,
- Options.ShouldIncludeScopesInCFG,
- Options.ShouldSynthesizeBodies,
- Options.ShouldConditionalizeStaticInitializers,
- /*addCXXNewAllocator=*/true,
- Options.ShouldIncludeRichConstructorsInCFG,
- Options.ShouldElideConstructors,
- /*addVirtualBaseBranches=*/true,
- injector),
- Ctx(ASTCtx), PP(PP), LangOpts(ASTCtx.getLangOpts()),
- PathConsumers(PDC), CreateStoreMgr(storemgr),
- CreateConstraintMgr(constraintmgr), CheckerMgr(checkerMgr),
- options(Options) {
- AnaCtxMgr.getCFGBuildOptions().setAllAlwaysAdd();
- AnaCtxMgr.getCFGBuildOptions().OmitImplicitValueInitializers = true;
- AnaCtxMgr.getCFGBuildOptions().AddCXXDefaultInitExprInAggregates =
- Options.ShouldIncludeDefaultInitForAggregates;
- }
- AnalysisManager::~AnalysisManager() {
- FlushDiagnostics();
- for (PathDiagnosticConsumers::iterator I = PathConsumers.begin(),
- E = PathConsumers.end(); I != E; ++I) {
- delete *I;
- }
- }
- void AnalysisManager::FlushDiagnostics() {
- PathDiagnosticConsumer::FilesMade filesMade;
- for (PathDiagnosticConsumers::iterator I = PathConsumers.begin(),
- E = PathConsumers.end();
- I != E; ++I) {
- (*I)->FlushDiagnostics(&filesMade);
- }
- }
|