[clang] [analyzer][NFC] Document check::ASTCodeBody checker callback (PR #84160)

Balazs Benics via cfe-commits cfe-commits at lists.llvm.org
Wed Mar 6 04:58:32 PST 2024


https://github.com/steakhal updated https://github.com/llvm/llvm-project/pull/84160

>From a3da80aa7114d938e9cc3f03ec79417777c91fbf Mon Sep 17 00:00:00 2001
From: Balazs Benics <benicsbalazs at gmail.com>
Date: Wed, 6 Mar 2024 13:05:44 +0100
Subject: [PATCH 1/2] [analyzer][NFC] Document check::ASTCodeBody checker
 callback

Fixes #73764

With this patch, now all the callbacks are demonstrated here.
---
 .../Checkers/CheckerDocumentation.cpp         | 58 +++++++++++--------
 1 file changed, 34 insertions(+), 24 deletions(-)

diff --git a/clang/lib/StaticAnalyzer/Checkers/CheckerDocumentation.cpp b/clang/lib/StaticAnalyzer/Checkers/CheckerDocumentation.cpp
index 01e0bed54cc6ed..ba66a2254cc777 100644
--- a/clang/lib/StaticAnalyzer/Checkers/CheckerDocumentation.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/CheckerDocumentation.cpp
@@ -33,30 +33,33 @@ namespace ento {
 /// checking.
 ///
 /// \sa CheckerContext
-class CheckerDocumentation : public Checker< check::PreStmt<ReturnStmt>,
-                                       check::PostStmt<DeclStmt>,
-                                       check::PreObjCMessage,
-                                       check::PostObjCMessage,
-                                       check::ObjCMessageNil,
-                                       check::PreCall,
-                                       check::PostCall,
-                                       check::BranchCondition,
-                                       check::NewAllocator,
-                                       check::Location,
-                                       check::Bind,
-                                       check::DeadSymbols,
-                                       check::BeginFunction,
-                                       check::EndFunction,
-                                       check::EndAnalysis,
-                                       check::EndOfTranslationUnit,
-                                       eval::Call,
-                                       eval::Assume,
-                                       check::LiveSymbols,
-                                       check::RegionChanges,
-                                       check::PointerEscape,
-                                       check::ConstPointerEscape,
-                                       check::Event<ImplicitNullDerefEvent>,
-                                       check::ASTDecl<FunctionDecl> > {
+class CheckerDocumentation : public Checker<                           //
+                                 check::ASTCodeBody,                   //
+                                 check::ASTDecl<FunctionDecl>,         //
+                                 check::BeginFunction,                 //
+                                 check::Bind,                          //
+                                 check::BranchCondition,               //
+                                 check::ConstPointerEscape,            //
+                                 check::DeadSymbols,                   //
+                                 check::EndAnalysis,                   //
+                                 check::EndFunction,                   //
+                                 check::EndOfTranslationUnit,          //
+                                 check::Event<ImplicitNullDerefEvent>, //
+                                 check::LiveSymbols,                   //
+                                 check::Location,                      //
+                                 check::NewAllocator,                  //
+                                 check::ObjCMessageNil,                //
+                                 check::PointerEscape,                 //
+                                 check::PostCall,                      //
+                                 check::PostObjCMessage,               //
+                                 check::PostStmt<DeclStmt>,            //
+                                 check::PreCall,                       //
+                                 check::PreObjCMessage,                //
+                                 check::PreStmt<ReturnStmt>,           //
+                                 check::RegionChanges,                 //
+                                 eval::Assume,                         //
+                                 eval::Call                            //
+                                 > {
 public:
   /// Pre-visit the Statement.
   ///
@@ -321,6 +324,13 @@ class CheckerDocumentation : public Checker< check::PreStmt<ReturnStmt>,
   void checkASTDecl(const FunctionDecl *D,
                     AnalysisManager &Mgr,
                     BugReporter &BR) const {}
+
+  /// Check every declaration that has a statement body in the AST.
+  ///
+  /// As AST traversal callback, which should only be used when the checker is
+  /// not path sensitive. It will be called for every Declaration in the AST.
+  void checkASTCodeBody(const Decl *D, AnalysisManager &Mgr,
+                        BugReporter &BR) const {}
 };
 
 void CheckerDocumentation::checkPostStmt(const DeclStmt *DS,

>From e7ee37d91774d2add3901cb1c5da81a3a9a824ed Mon Sep 17 00:00:00 2001
From: Balazs Benics <benicsbalazs at gmail.com>
Date: Wed, 6 Mar 2024 13:57:42 +0100
Subject: [PATCH 2/2] Use clang-format off-on

---
 .../Checkers/CheckerDocumentation.cpp         | 57 ++++++++++---------
 1 file changed, 30 insertions(+), 27 deletions(-)

diff --git a/clang/lib/StaticAnalyzer/Checkers/CheckerDocumentation.cpp b/clang/lib/StaticAnalyzer/Checkers/CheckerDocumentation.cpp
index ba66a2254cc777..153a1b1acbfa19 100644
--- a/clang/lib/StaticAnalyzer/Checkers/CheckerDocumentation.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/CheckerDocumentation.cpp
@@ -33,33 +33,36 @@ namespace ento {
 /// checking.
 ///
 /// \sa CheckerContext
-class CheckerDocumentation : public Checker<                           //
-                                 check::ASTCodeBody,                   //
-                                 check::ASTDecl<FunctionDecl>,         //
-                                 check::BeginFunction,                 //
-                                 check::Bind,                          //
-                                 check::BranchCondition,               //
-                                 check::ConstPointerEscape,            //
-                                 check::DeadSymbols,                   //
-                                 check::EndAnalysis,                   //
-                                 check::EndFunction,                   //
-                                 check::EndOfTranslationUnit,          //
-                                 check::Event<ImplicitNullDerefEvent>, //
-                                 check::LiveSymbols,                   //
-                                 check::Location,                      //
-                                 check::NewAllocator,                  //
-                                 check::ObjCMessageNil,                //
-                                 check::PointerEscape,                 //
-                                 check::PostCall,                      //
-                                 check::PostObjCMessage,               //
-                                 check::PostStmt<DeclStmt>,            //
-                                 check::PreCall,                       //
-                                 check::PreObjCMessage,                //
-                                 check::PreStmt<ReturnStmt>,           //
-                                 check::RegionChanges,                 //
-                                 eval::Assume,                         //
-                                 eval::Call                            //
-                                 > {
+class CheckerDocumentation
+    : public Checker<
+          // clang-format off
+          check::ASTCodeBody,
+          check::ASTDecl<FunctionDecl>,
+          check::BeginFunction,
+          check::Bind,
+          check::BranchCondition,
+          check::ConstPointerEscape,
+          check::DeadSymbols,
+          check::EndAnalysis,
+          check::EndFunction,
+          check::EndOfTranslationUnit,
+          check::Event<ImplicitNullDerefEvent>,
+          check::LiveSymbols,
+          check::Location,
+          check::NewAllocator,
+          check::ObjCMessageNil,
+          check::PointerEscape,
+          check::PostCall,
+          check::PostObjCMessage,
+          check::PostStmt<DeclStmt>,
+          check::PreCall,
+          check::PreObjCMessage,
+          check::PreStmt<ReturnStmt>,
+          check::RegionChanges,
+          eval::Assume,
+          eval::Call
+          // clang-format on
+          > {
 public:
   /// Pre-visit the Statement.
   ///



More information about the cfe-commits mailing list