AnalysisManager.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. //===-- AnalysisManager.cpp -------------------------------------*- C++ -*-===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. #include "clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h"
  10. using namespace clang;
  11. using namespace ento;
  12. void AnalysisManager::anchor() { }
  13. AnalysisManager::AnalysisManager(ASTContext &ctx, DiagnosticsEngine &diags,
  14. const LangOptions &lang,
  15. const PathDiagnosticConsumers &PDC,
  16. StoreManagerCreator storemgr,
  17. ConstraintManagerCreator constraintmgr,
  18. CheckerManager *checkerMgr,
  19. AnalyzerOptions &Options,
  20. CodeInjector *injector)
  21. : AnaCtxMgr(Options.UnoptimizedCFG,
  22. Options.includeImplicitDtorsInCFG(),
  23. /*AddInitializers=*/true,
  24. Options.includeTemporaryDtorsInCFG(),
  25. Options.includeLifetimeInCFG(),
  26. Options.includeLoopExitInCFG(),
  27. Options.shouldSynthesizeBodies(),
  28. Options.shouldConditionalizeStaticInitializers(),
  29. /*addCXXNewAllocator=*/true,
  30. injector),
  31. Ctx(ctx),
  32. Diags(diags),
  33. LangOpts(lang),
  34. PathConsumers(PDC),
  35. CreateStoreMgr(storemgr), CreateConstraintMgr(constraintmgr),
  36. CheckerMgr(checkerMgr),
  37. options(Options) {
  38. AnaCtxMgr.getCFGBuildOptions().setAllAlwaysAdd();
  39. }
  40. AnalysisManager::~AnalysisManager() {
  41. FlushDiagnostics();
  42. for (PathDiagnosticConsumers::iterator I = PathConsumers.begin(),
  43. E = PathConsumers.end(); I != E; ++I) {
  44. delete *I;
  45. }
  46. }
  47. void AnalysisManager::FlushDiagnostics() {
  48. PathDiagnosticConsumer::FilesMade filesMade;
  49. for (PathDiagnosticConsumers::iterator I = PathConsumers.begin(),
  50. E = PathConsumers.end();
  51. I != E; ++I) {
  52. (*I)->FlushDiagnostics(&filesMade);
  53. }
  54. }