Index: clang/include/clang/StaticAnalyzer/Core/CheckerManager.h =================================================================== --- clang/include/clang/StaticAnalyzer/Core/CheckerManager.h +++ clang/include/clang/StaticAnalyzer/Core/CheckerManager.h @@ -115,13 +115,15 @@ }; class CheckerManager { + ASTContext &Context; const LangOptions LangOpts; AnalyzerOptions &AOptions; CheckName CurrentCheckName; public: - CheckerManager(const LangOptions &langOpts, AnalyzerOptions &AOptions) - : LangOpts(langOpts), AOptions(AOptions) {} + CheckerManager(ASTContext &Context, const LangOptions &langOpts, + AnalyzerOptions &AOptions) + : Context(Context), LangOpts(langOpts), AOptions(AOptions) {} ~CheckerManager(); @@ -134,6 +136,7 @@ const LangOptions &getLangOpts() const { return LangOpts; } AnalyzerOptions &getAnalyzerOptions() { return AOptions; } + ASTContext &getASTContext() { return Context; } using CheckerRef = CheckerBase *; using CheckerTag = const void *; Index: clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistration.h =================================================================== --- clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistration.h +++ clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistration.h @@ -10,6 +10,7 @@ #ifndef LLVM_CLANG_STATICANALYZER_FRONTEND_CHECKERREGISTRATION_H #define LLVM_CLANG_STATICANALYZER_FRONTEND_CHECKERREGISTRATION_H +#include "clang/AST/ASTContext.h" #include "clang/Basic/LLVM.h" #include #include @@ -25,7 +26,9 @@ class CheckerRegistry; std::unique_ptr createCheckerManager( - AnalyzerOptions &opts, const LangOptions &langOpts, + ASTContext &context, + AnalyzerOptions &opts, + const LangOptions &langOpts, ArrayRef plugins, ArrayRef> checkerRegistrationFns, DiagnosticsEngine &diags); Index: clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp =================================================================== --- clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp +++ clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp @@ -296,7 +296,7 @@ void Initialize(ASTContext &Context) override { Ctx = &Context; checkerMgr = - createCheckerManager(*Opts, PP.getLangOpts(), Plugins, + createCheckerManager(*Ctx, *Opts, PP.getLangOpts(), Plugins, CheckerRegistrationFns, PP.getDiagnostics()); Mgr = llvm::make_unique( Index: clang/lib/StaticAnalyzer/Frontend/CheckerRegistration.cpp =================================================================== --- clang/lib/StaticAnalyzer/Frontend/CheckerRegistration.cpp +++ clang/lib/StaticAnalyzer/Frontend/CheckerRegistration.cpp @@ -112,12 +112,12 @@ } std::unique_ptr ento::createCheckerManager( + ASTContext &context, AnalyzerOptions &opts, const LangOptions &langOpts, ArrayRef plugins, ArrayRef> checkerRegistrationFns, DiagnosticsEngine &diags) { - std::unique_ptr checkerMgr( - new CheckerManager(langOpts, opts)); + auto checkerMgr = llvm::make_unique(context, langOpts, opts); SmallVector checkerOpts = getCheckerOptList(opts);