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...@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 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits