-
Notifications
You must be signed in to change notification settings - Fork 14.8k
[Clang][analyzer][NFC] Const-correct CheckerContext API #154741
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
@llvm/pr-subscribers-clang Author: Arseniy Zaostrovnykh (necto) ChangesImprove const-correctness of CheckerContext API by defining the missing This NFC change is triggered by a work on a downstream checker that operated on a Full diff: https://github.com/llvm/llvm-project/pull/154741.diff 4 Files Affected:
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
|
@llvm/pr-subscribers-clang-static-analyzer-1 Author: Arseniy Zaostrovnykh (necto) ChangesImprove const-correctness of CheckerContext API by defining the missing This NFC change is triggered by a work on a downstream checker that operated on a Full diff: https://github.com/llvm/llvm-project/pull/154741.diff 4 Files Affected:
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
|
You can test this locally with the following command:git-clang-format --diff HEAD~1 HEAD --extensions h -- clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h clang/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h View the diff from clang-format here.diff --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h
index 1a296a7a1..cf035a999 100644
--- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h
+++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/CheckerContext.h
@@ -72,9 +72,7 @@ public:
StoreManager &getStoreManager() {
return Eng.getStoreManager();
}
- const StoreManager &getStoreManager() const {
- 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
@@ -119,9 +117,7 @@ public:
BugReporter &getBugReporter() {
return Eng.getBugReporter();
}
- const BugReporter &getBugReporter() const {
- return Eng.getBugReporter();
- }
+ const BugReporter &getBugReporter() const { return Eng.getBugReporter(); }
const SourceManager &getSourceManager() {
return getBugReporter().getSourceManager();
@@ -131,14 +127,14 @@ public:
}
Preprocessor &getPreprocessor() { return getBugReporter().getPreprocessor(); }
- const Preprocessor &getPreprocessor() const { return getBugReporter().getPreprocessor(); }
+ const Preprocessor &getPreprocessor() const {
+ return getBugReporter().getPreprocessor();
+ }
SValBuilder &getSValBuilder() {
return Eng.getSValBuilder();
}
- const SValBuilder &getSValBuilder() const {
- return Eng.getSValBuilder();
- }
+ const SValBuilder &getSValBuilder() const { return Eng.getSValBuilder(); }
SymbolManager &getSymbolManager() {
return getSValBuilder().getSymbolManager();
diff --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h
index 40d4e6811..d184986cd 100644
--- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h
+++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ExprEngine.h
@@ -422,7 +422,9 @@ public:
const ProgramStateManager &getStateManager() const { return StateMgr; }
StoreManager &getStoreManager() { return StateMgr.getStoreManager(); }
- const StoreManager &getStoreManager() const { return StateMgr.getStoreManager(); }
+ const StoreManager &getStoreManager() const {
+ return StateMgr.getStoreManager();
+ }
ConstraintManager &getConstraintManager() {
return StateMgr.getConstraintManager();
diff --git a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h
index 1fce3da4d..12487a33a 100644
--- a/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h
+++ b/clang/include/clang/StaticAnalyzer/Core/PathSensitive/ProgramState.h
@@ -574,7 +574,9 @@ public:
StoreManager &getStoreManager() { return *StoreMgr; }
const StoreManager &getStoreManager() const { return *StoreMgr; }
ConstraintManager &getConstraintManager() { return *ConstraintMgr; }
- const ConstraintManager &getConstraintManager() const { return *ConstraintMgr; }
+ const ConstraintManager &getConstraintManager() const {
+ return *ConstraintMgr;
+ }
ExprEngine &getOwningEngine() { return *Eng; }
ProgramStateRef
|
Unless I see objections, I'll merge this PR tomorrow |
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 neededC.getPredecessor()
at one point, which forced me to removeconst
from many places.