Skip to content

Commit 4ece68a

Browse files
author
George Karpenkov
committedAug 6, 2018
[analyzer] Add ASTContext to CheckerManager
Some checkers require ASTContext. Having it in the constructor saves a lot of boilerplate of having to pass it around. Differential Revision: https://reviews.llvm.org/D50111 llvm-svn: 339079
1 parent 08f3fe4 commit 4ece68a

File tree

6 files changed

+39
-38
lines changed

6 files changed

+39
-38
lines changed
 

‎clang/include/clang/StaticAnalyzer/Core/CheckerManager.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,13 +115,14 @@ enum class ObjCMessageVisitKind {
115115
};
116116

117117
class CheckerManager {
118+
ASTContext &Context;
118119
const LangOptions LangOpts;
119120
AnalyzerOptions &AOptions;
120121
CheckName CurrentCheckName;
121122

122123
public:
123-
CheckerManager(const LangOptions &langOpts, AnalyzerOptions &AOptions)
124-
: LangOpts(langOpts), AOptions(AOptions) {}
124+
CheckerManager(ASTContext &Context, AnalyzerOptions &AOptions)
125+
: Context(Context), LangOpts(Context.getLangOpts()), AOptions(AOptions) {}
125126

126127
~CheckerManager();
127128

@@ -134,6 +135,7 @@ class CheckerManager {
134135

135136
const LangOptions &getLangOpts() const { return LangOpts; }
136137
AnalyzerOptions &getAnalyzerOptions() { return AOptions; }
138+
ASTContext &getASTContext() { return Context; }
137139

138140
using CheckerRef = CheckerBase *;
139141
using CheckerTag = const void *;

‎clang/include/clang/StaticAnalyzer/Core/PathSensitive/AnalysisManager.h

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,12 @@ class AnalysisManager : public BugReporterData {
4646
public:
4747
AnalyzerOptions &options;
4848

49-
AnalysisManager(ASTContext &ctx,DiagnosticsEngine &diags,
50-
const LangOptions &lang,
49+
AnalysisManager(ASTContext &ctx, DiagnosticsEngine &diags,
5150
const PathDiagnosticConsumers &Consumers,
5251
StoreManagerCreator storemgr,
5352
ConstraintManagerCreator constraintmgr,
54-
CheckerManager *checkerMgr,
55-
AnalyzerOptions &Options,
56-
CodeInjector* injector = nullptr);
53+
CheckerManager *checkerMgr, AnalyzerOptions &Options,
54+
CodeInjector *injector = nullptr);
5755

5856
~AnalysisManager() override;
5957

‎clang/include/clang/StaticAnalyzer/Frontend/CheckerRegistration.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#ifndef LLVM_CLANG_STATICANALYZER_FRONTEND_CHECKERREGISTRATION_H
1111
#define LLVM_CLANG_STATICANALYZER_FRONTEND_CHECKERREGISTRATION_H
1212

13+
#include "clang/AST/ASTContext.h"
1314
#include "clang/Basic/LLVM.h"
1415
#include <functional>
1516
#include <memory>
@@ -25,7 +26,8 @@ namespace ento {
2526
class CheckerRegistry;
2627

2728
std::unique_ptr<CheckerManager> createCheckerManager(
28-
AnalyzerOptions &opts, const LangOptions &langOpts,
29+
ASTContext &context,
30+
AnalyzerOptions &opts,
2931
ArrayRef<std::string> plugins,
3032
ArrayRef<std::function<void(CheckerRegistry &)>> checkerRegistrationFns,
3133
DiagnosticsEngine &diags);

‎clang/lib/StaticAnalyzer/Core/AnalysisManager.cpp

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,28 +14,28 @@ using namespace ento;
1414

1515
void AnalysisManager::anchor() { }
1616

17-
AnalysisManager::AnalysisManager(
18-
ASTContext &ASTCtx, DiagnosticsEngine &diags, const LangOptions &lang,
19-
const PathDiagnosticConsumers &PDC, StoreManagerCreator storemgr,
20-
ConstraintManagerCreator constraintmgr, CheckerManager *checkerMgr,
21-
AnalyzerOptions &Options, CodeInjector *injector)
22-
: AnaCtxMgr(ASTCtx, Options.UnoptimizedCFG,
23-
Options.includeImplicitDtorsInCFG(),
24-
/*AddInitializers=*/true, Options.includeTemporaryDtorsInCFG(),
25-
Options.includeLifetimeInCFG(),
26-
// Adding LoopExit elements to the CFG is a requirement for loop
27-
// unrolling.
28-
Options.includeLoopExitInCFG() || Options.shouldUnrollLoops(),
29-
Options.includeScopesInCFG(),
30-
Options.shouldSynthesizeBodies(),
31-
Options.shouldConditionalizeStaticInitializers(),
32-
/*addCXXNewAllocator=*/true,
33-
Options.includeRichConstructorsInCFG(),
34-
Options.shouldElideConstructors(),
35-
injector),
36-
Ctx(ASTCtx), Diags(diags), LangOpts(lang), PathConsumers(PDC),
37-
CreateStoreMgr(storemgr), CreateConstraintMgr(constraintmgr),
38-
CheckerMgr(checkerMgr), options(Options) {
17+
AnalysisManager::AnalysisManager(ASTContext &ASTCtx, DiagnosticsEngine &diags,
18+
const PathDiagnosticConsumers &PDC,
19+
StoreManagerCreator storemgr,
20+
ConstraintManagerCreator constraintmgr,
21+
CheckerManager *checkerMgr,
22+
AnalyzerOptions &Options,
23+
CodeInjector *injector)
24+
: AnaCtxMgr(
25+
ASTCtx, Options.UnoptimizedCFG, Options.includeImplicitDtorsInCFG(),
26+
/*AddInitializers=*/true, Options.includeTemporaryDtorsInCFG(),
27+
Options.includeLifetimeInCFG(),
28+
// Adding LoopExit elements to the CFG is a requirement for loop
29+
// unrolling.
30+
Options.includeLoopExitInCFG() || Options.shouldUnrollLoops(),
31+
Options.includeScopesInCFG(), Options.shouldSynthesizeBodies(),
32+
Options.shouldConditionalizeStaticInitializers(),
33+
/*addCXXNewAllocator=*/true, Options.includeRichConstructorsInCFG(),
34+
Options.shouldElideConstructors(), injector),
35+
Ctx(ASTCtx), Diags(diags), LangOpts(ASTCtx.getLangOpts()),
36+
PathConsumers(PDC), CreateStoreMgr(storemgr),
37+
CreateConstraintMgr(constraintmgr), CheckerMgr(checkerMgr),
38+
options(Options) {
3939
AnaCtxMgr.getCFGBuildOptions().setAllAlwaysAdd();
4040
}
4141

‎clang/lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -295,13 +295,12 @@ class AnalysisConsumer : public AnalysisASTConsumer,
295295

296296
void Initialize(ASTContext &Context) override {
297297
Ctx = &Context;
298-
checkerMgr =
299-
createCheckerManager(*Opts, PP.getLangOpts(), Plugins,
300-
CheckerRegistrationFns, PP.getDiagnostics());
298+
checkerMgr = createCheckerManager(
299+
*Ctx, *Opts, Plugins, CheckerRegistrationFns, PP.getDiagnostics());
301300

302301
Mgr = llvm::make_unique<AnalysisManager>(
303-
*Ctx, PP.getDiagnostics(), PP.getLangOpts(), PathConsumers,
304-
CreateStoreMgr, CreateConstraintMgr, checkerMgr.get(), *Opts, Injector);
302+
*Ctx, PP.getDiagnostics(), PathConsumers, CreateStoreMgr,
303+
CreateConstraintMgr, checkerMgr.get(), *Opts, Injector);
305304
}
306305

307306
/// Store the top level decls in the set to be processed later on.

‎clang/lib/StaticAnalyzer/Frontend/CheckerRegistration.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -112,12 +112,12 @@ getCheckerOptList(const AnalyzerOptions &opts) {
112112
}
113113

114114
std::unique_ptr<CheckerManager> ento::createCheckerManager(
115-
AnalyzerOptions &opts, const LangOptions &langOpts,
115+
ASTContext &context,
116+
AnalyzerOptions &opts,
116117
ArrayRef<std::string> plugins,
117118
ArrayRef<std::function<void(CheckerRegistry &)>> checkerRegistrationFns,
118119
DiagnosticsEngine &diags) {
119-
std::unique_ptr<CheckerManager> checkerMgr(
120-
new CheckerManager(langOpts, opts));
120+
auto checkerMgr = llvm::make_unique<CheckerManager>(context, opts);
121121

122122
SmallVector<CheckerOptInfo, 8> checkerOpts = getCheckerOptList(opts);
123123

0 commit comments

Comments
 (0)
Please sign in to comment.