[clang] [Clang][analyzer][NFC] Const-correct CheckerContext API (PR #154741)
Arseniy Zaostrovnykh via cfe-commits
cfe-commits at lists.llvm.org
Thu Aug 21 05:02:00 PDT 2025
https://github.com/necto created https://github.com/llvm/llvm-project/pull/154741
Improve const-correctness of CheckerContext API by defining the missing `const` overloads to its accessor member functions.
This NFC change is triggered by a work on a downstream checker that operated on a `const CheckerConst& C` most of the time, but needed `C.getPredecessor()` at one point, which forced me to remove `const` from many places.
>From a48d6310d28f0ec881da723af932d3cd0475614a Mon Sep 17 00:00:00 2001
From: Arseniy Zaostrovnykh <necto.ne at gmail.com>
Date: Thu, 21 Aug 2025 12:04:31 +0200
Subject: [PATCH] [Clang][analyzer][NFC] Const-correct CheckerContext API
---
.../Core/BugReporter/BugReporter.h | 2 ++
.../Core/PathSensitive/CheckerContext.h | 27 +++++++++++++++++++
.../Core/PathSensitive/ExprEngine.h | 9 +++++++
.../Core/PathSensitive/ProgramState.h | 2 ++
4 files changed, 40 insertions(+)
diff --git a/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h b/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h
index 19535e6bac4d5..f6a023368f3d2 100644
--- a/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h
+++ b/clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h
@@ -623,10 +623,12 @@ class BugReporter {
ASTContext &getContext() { return D.getASTContext(); }
const SourceManager &getSourceManager() { return D.getSourceManager(); }
+ const SourceManager &getSourceManager() const { return D.getSourceManager(); }
const AnalyzerOptions &getAnalyzerOptions() { return D.getAnalyzerOptions(); }
Preprocessor &getPreprocessor() { return D.getPreprocessor(); }
+ const Preprocessor &getPreprocessor() const { return D.getPreprocessor(); }
/// Get the top-level entry point for the issue to be reported.
const Decl *getAnalysisEntryPoint() const { return AnalysisEntryPoint; }
diff --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h
index f20b0031c1528..1a296a7a190f6 100644
--- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h
+++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h
@@ -58,25 +58,36 @@ class CheckerContext {
AnalysisManager &getAnalysisManager() {
return Eng.getAnalysisManager();
}
+ const AnalysisManager &getAnalysisManager() const {
+ return Eng.getAnalysisManager();
+ }
ConstraintManager &getConstraintManager() {
return Eng.getConstraintManager();
}
+ const ConstraintManager &getConstraintManager() const {
+ return Eng.getConstraintManager();
+ }
StoreManager &getStoreManager() {
return Eng.getStoreManager();
}
+ const StoreManager &getStoreManager() const {
+ return Eng.getStoreManager();
+ }
/// Returns the previous node in the exploded graph, which includes
/// the state of the program before the checker ran. Note, checkers should
/// not retain the node in their state since the nodes might get invalidated.
ExplodedNode *getPredecessor() { return Pred; }
+ const ExplodedNode *getPredecessor() const { return Pred; }
const ProgramPoint getLocation() const { return Location; }
const ProgramStateRef &getState() const { return Pred->getState(); }
/// Check if the checker changed the state of the execution; ex: added
/// a new transition or a bug report.
bool isDifferent() { return Changed; }
+ bool isDifferent() const { return Changed; }
/// Returns the number of times the current block has been visited
/// along the analyzed path.
@@ -108,24 +119,40 @@ class CheckerContext {
BugReporter &getBugReporter() {
return Eng.getBugReporter();
}
+ const BugReporter &getBugReporter() const {
+ return Eng.getBugReporter();
+ }
const SourceManager &getSourceManager() {
return getBugReporter().getSourceManager();
}
+ const SourceManager &getSourceManager() const {
+ return getBugReporter().getSourceManager();
+ }
Preprocessor &getPreprocessor() { return getBugReporter().getPreprocessor(); }
+ const Preprocessor &getPreprocessor() const { return getBugReporter().getPreprocessor(); }
SValBuilder &getSValBuilder() {
return Eng.getSValBuilder();
}
+ const SValBuilder &getSValBuilder() const {
+ return Eng.getSValBuilder();
+ }
SymbolManager &getSymbolManager() {
return getSValBuilder().getSymbolManager();
}
+ const SymbolManager &getSymbolManager() const {
+ return getSValBuilder().getSymbolManager();
+ }
ProgramStateManager &getStateManager() {
return Eng.getStateManager();
}
+ const ProgramStateManager &getStateManager() const {
+ return Eng.getStateManager();
+ }
AnalysisDeclContext *getCurrentAnalysisDeclContext() const {
return Pred->getLocationContext()->getAnalysisDeclContext();
diff --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h
index 2335588dbd27c..40d4e6811cb99 100644
--- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h
+++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h
@@ -196,6 +196,7 @@ class ExprEngine {
ASTContext &getContext() const { return AMgr.getASTContext(); }
AnalysisManager &getAnalysisManager() { return AMgr; }
+ const AnalysisManager &getAnalysisManager() const { return AMgr; }
AnalysisDeclContextManager &getAnalysisDeclContextManager() {
return AMgr.getAnalysisDeclContextManager();
@@ -206,8 +207,10 @@ class ExprEngine {
}
SValBuilder &getSValBuilder() { return svalBuilder; }
+ const SValBuilder &getSValBuilder() const { return svalBuilder; }
BugReporter &getBugReporter() { return BR; }
+ const BugReporter &getBugReporter() const { return BR; }
cross_tu::CrossTranslationUnitContext *
getCrossTranslationUnitContext() {
@@ -416,12 +419,17 @@ class ExprEngine {
unsigned int Space, bool IsDot) const;
ProgramStateManager &getStateManager() { return StateMgr; }
+ const ProgramStateManager &getStateManager() const { return StateMgr; }
StoreManager &getStoreManager() { return StateMgr.getStoreManager(); }
+ const StoreManager &getStoreManager() const { return StateMgr.getStoreManager(); }
ConstraintManager &getConstraintManager() {
return StateMgr.getConstraintManager();
}
+ const ConstraintManager &getConstraintManager() const {
+ return StateMgr.getConstraintManager();
+ }
// FIXME: Remove when we migrate over to just using SValBuilder.
BasicValueFactory &getBasicVals() {
@@ -429,6 +437,7 @@ class ExprEngine {
}
SymbolManager &getSymbolManager() { return SymMgr; }
+ const SymbolManager &getSymbolManager() const { return SymMgr; }
MemRegionManager &getRegionManager() { return MRMgr; }
DataTag::Factory &getDataTags() { return Engine.getDataTags(); }
diff --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h
index 52714535e7907..1fce3da4d3f26 100644
--- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h
+++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h
@@ -572,7 +572,9 @@ class ProgramStateManager {
CallEventManager &getCallEventManager() { return *CallEventMgr; }
StoreManager &getStoreManager() { return *StoreMgr; }
+ const StoreManager &getStoreManager() const { return *StoreMgr; }
ConstraintManager &getConstraintManager() { return *ConstraintMgr; }
+ const ConstraintManager &getConstraintManager() const { return *ConstraintMgr; }
ExprEngine &getOwningEngine() { return *Eng; }
ProgramStateRef
More information about the cfe-commits
mailing list