Replace `transfer(const Stmt *, ...)` with `transfer(const CFGElement *, ...)` in `crubit/nullability_verification`.

PiperOrigin-RevId: 474518575
diff --git a/nullability_verification/pointer_nullability_analysis.cc b/nullability_verification/pointer_nullability_analysis.cc
index 83136b4..e348993 100644
--- a/nullability_verification/pointer_nullability_analysis.cc
+++ b/nullability_verification/pointer_nullability_analysis.cc
@@ -15,8 +15,8 @@
 #include "clang/AST/Stmt.h"
 #include "clang/AST/Type.h"
 #include "clang/ASTMatchers/ASTMatchFinder.h"
+#include "clang/Analysis/FlowSensitive/CFGMatchSwitch.h"
 #include "clang/Analysis/FlowSensitive/DataflowEnvironment.h"
-#include "clang/Analysis/FlowSensitive/MatchSwitch.h"
 #include "clang/Analysis/FlowSensitive/NoopLattice.h"
 #include "clang/Analysis/FlowSensitive/Value.h"
 #include "clang/Basic/LLVM.h"
@@ -28,8 +28,8 @@
 
 using ast_matchers::MatchFinder;
 using dataflow::BoolValue;
+using dataflow::CFGMatchSwitchBuilder;
 using dataflow::Environment;
-using dataflow::MatchSwitchBuilder;
 using dataflow::NoopLattice;
 using dataflow::PointerValue;
 using dataflow::SkipPast;
@@ -155,20 +155,20 @@
 }
 
 auto buildTransferer() {
-  return MatchSwitchBuilder<TransferState<NoopLattice>>()
+  return CFGMatchSwitchBuilder<TransferState<NoopLattice>>()
       // Handles initialization of the null states of pointers
-      .CaseOf<Expr>(isPointerVariableReference(), transferPointer)
-      .CaseOf<Expr>(isCXXThisExpr(), transferNotNullPointer)
-      .CaseOf<Expr>(isAddrOf(), transferNotNullPointer)
-      .CaseOf<Expr>(isNullPointerLiteral(), transferNullPointer)
-      .CaseOf<MemberExpr>(isMemberOfPointerType(), transferPointer)
-      .CaseOf<CallExpr>(isCallExpr(), transferCallExpr)
+      .CaseOfCFGStmt<Expr>(isPointerVariableReference(), transferPointer)
+      .CaseOfCFGStmt<Expr>(isCXXThisExpr(), transferNotNullPointer)
+      .CaseOfCFGStmt<Expr>(isAddrOf(), transferNotNullPointer)
+      .CaseOfCFGStmt<Expr>(isNullPointerLiteral(), transferNullPointer)
+      .CaseOfCFGStmt<MemberExpr>(isMemberOfPointerType(), transferPointer)
+      .CaseOfCFGStmt<CallExpr>(isCallExpr(), transferCallExpr)
       // Handles comparison between 2 pointers
-      .CaseOf<BinaryOperator>(isPointerCheckBinOp(),
-                              transferNullCheckComparison)
+      .CaseOfCFGStmt<BinaryOperator>(isPointerCheckBinOp(),
+                                     transferNullCheckComparison)
       // Handles checking of pointer as boolean
-      .CaseOf<Expr>(isImplicitCastPointerToBool(),
-                    transferNullCheckImplicitCastPtrToBool)
+      .CaseOfCFGStmt<Expr>(isImplicitCastPointerToBool(),
+                           transferNullCheckImplicitCastPtrToBool)
       .Build();
 }
 }  // namespace
@@ -177,11 +177,11 @@
     : DataflowAnalysis<PointerNullabilityAnalysis, NoopLattice>(Context),
       Transferer(buildTransferer()) {}
 
-void PointerNullabilityAnalysis::transfer(const Stmt* Stmt,
+void PointerNullabilityAnalysis::transfer(const CFGElement* Elt,
                                           NoopLattice& Lattice,
                                           Environment& Env) {
   TransferState<NoopLattice> State(Lattice, Env);
-  Transferer(*Stmt, getASTContext(), State);
+  Transferer(*Elt, getASTContext(), State);
 }
 
 BoolValue& mergeBoolValues(BoolValue& Bool1, const Environment& Env1,
diff --git a/nullability_verification/pointer_nullability_analysis.h b/nullability_verification/pointer_nullability_analysis.h
index 6d58c08..3ff9ac0 100644
--- a/nullability_verification/pointer_nullability_analysis.h
+++ b/nullability_verification/pointer_nullability_analysis.h
@@ -6,16 +6,12 @@
 #define CRUBIT_NULLABILITY_VERIFICATION_POINTER_NULLABILITY_ANALYSIS_H_
 
 #include "clang/AST/ASTContext.h"
-#include "clang/AST/Expr.h"
-#include "clang/AST/Stmt.h"
 #include "clang/AST/Type.h"
+#include "clang/Analysis/FlowSensitive/CFGMatchSwitch.h"
 #include "clang/Analysis/FlowSensitive/DataflowAnalysis.h"
 #include "clang/Analysis/FlowSensitive/DataflowEnvironment.h"
-#include "clang/Analysis/FlowSensitive/DataflowLattice.h"
-#include "clang/Analysis/FlowSensitive/MatchSwitch.h"
 #include "clang/Analysis/FlowSensitive/NoopLattice.h"
 #include "clang/Analysis/FlowSensitive/Value.h"
-#include "clang/Tooling/Tooling.h"
 
 namespace clang {
 namespace tidy {
@@ -31,7 +27,7 @@
 
   static dataflow::NoopLattice initialElement() { return {}; }
 
-  void transfer(const Stmt* Stmt, dataflow::NoopLattice& Lattice,
+  void transfer(const CFGElement* Elt, dataflow::NoopLattice& Lattice,
                 dataflow::Environment& Env);
 
   bool merge(QualType Type, const dataflow::Value& Val1,
@@ -41,7 +37,7 @@
 
  private:
   // Applies transfer functions on statements
-  dataflow::MatchSwitch<dataflow::TransferState<dataflow::NoopLattice>>
+  dataflow::CFGMatchSwitch<dataflow::TransferState<dataflow::NoopLattice>>
       Transferer;
 };
 }  // namespace nullability
diff --git a/nullability_verification/pointer_nullability_diagnosis.cc b/nullability_verification/pointer_nullability_diagnosis.cc
index f1e92c7..c8c6a75 100644
--- a/nullability_verification/pointer_nullability_diagnosis.cc
+++ b/nullability_verification/pointer_nullability_diagnosis.cc
@@ -11,6 +11,7 @@
 #include "clang/AST/ExprCXX.h"
 #include "clang/AST/Stmt.h"
 #include "clang/ASTMatchers/ASTMatchFinder.h"
+#include "clang/Analysis/FlowSensitive/CFGMatchSwitch.h"
 #include "clang/Analysis/FlowSensitive/DataflowEnvironment.h"
 #include "clang/Basic/Specifiers.h"
 
@@ -19,6 +20,7 @@
 namespace nullability {
 
 using ast_matchers::MatchFinder;
+using dataflow::CFGMatchSwitchBuilder;
 using dataflow::Environment;
 
 namespace {
@@ -112,15 +114,14 @@
 }
 
 auto buildDiagnoser() {
-  return dataflow::MatchSwitchBuilder<const Environment,
-                                      llvm::Optional<const Stmt*>>()
+  return CFGMatchSwitchBuilder<const Environment, llvm::Optional<const Stmt*>>()
       // (*)
-      .CaseOf<UnaryOperator>(isPointerDereference(), diagnoseDereference)
+      .CaseOfCFGStmt<UnaryOperator>(isPointerDereference(), diagnoseDereference)
       // (->)
-      .CaseOf<MemberExpr>(isPointerArrow(), diagnoseArrow)
+      .CaseOfCFGStmt<MemberExpr>(isPointerArrow(), diagnoseArrow)
       // Check compatibility of parameter assignments
-      .CaseOf<CallExpr>(isCallExpr(), diagnoseCallExpr)
-      .CaseOf<ReturnStmt>(isPointerReturn(), diagnoseReturn)
+      .CaseOfCFGStmt<CallExpr>(isCallExpr(), diagnoseCallExpr)
+      .CaseOfCFGStmt<ReturnStmt>(isPointerReturn(), diagnoseReturn)
       .Build();
 }
 
diff --git a/nullability_verification/pointer_nullability_diagnosis.h b/nullability_verification/pointer_nullability_diagnosis.h
index 4d92456..e688210 100644
--- a/nullability_verification/pointer_nullability_diagnosis.h
+++ b/nullability_verification/pointer_nullability_diagnosis.h
@@ -7,8 +7,8 @@
 
 #include "clang/AST/ASTContext.h"
 #include "clang/AST/Stmt.h"
+#include "clang/Analysis/FlowSensitive/CFGMatchSwitch.h"
 #include "clang/Analysis/FlowSensitive/DataflowEnvironment.h"
-#include "clang/Analysis/FlowSensitive/MatchSwitch.h"
 #include "llvm/ADT/Optional.h"
 
 namespace clang {
@@ -30,14 +30,14 @@
   ///
   /// TODO(b/233582219): Extend diagnosis to return more information, e.g. the
   /// type of violation.
-  llvm::Optional<const Stmt*> diagnose(const Stmt* Stmt, ASTContext& Ctx,
+  llvm::Optional<const Stmt*> diagnose(const CFGElement* Elt, ASTContext& Ctx,
                                        const dataflow::Environment& Env) {
-    return Diagnoser(*Stmt, Ctx, Env);
+    return Diagnoser(*Elt, Ctx, Env);
   }
 
  private:
-  dataflow::MatchSwitch<const dataflow::Environment,
-                        llvm::Optional<const Stmt*>>
+  dataflow::CFGMatchSwitch<const dataflow::Environment,
+                           llvm::Optional<const Stmt*>>
       Diagnoser;
 };
 
diff --git a/nullability_verification/pointer_nullability_verification_test.cc b/nullability_verification/pointer_nullability_verification_test.cc
index 9128c98..274f064 100644
--- a/nullability_verification/pointer_nullability_verification_test.cc
+++ b/nullability_verification/pointer_nullability_verification_test.cc
@@ -40,14 +40,12 @@
               })
               .withPostVisitCFG(
                   [&Diagnostics, &Diagnoser](
-                      ASTContext &Ctx, const CFGElement &Elem,
+                      ASTContext &Ctx, const CFGElement &Elt,
                       const TypeErasedDataflowAnalysisState &State) {
-                    if (llvm::Optional<CFGStmt> Stmt = Elem.getAs<CFGStmt>()) {
-                      auto StmtDiagnostics =
-                          Diagnoser.diagnose(Stmt->getStmt(), Ctx, State.Env);
-                      if (StmtDiagnostics.has_value()) {
-                        Diagnostics.push_back(StmtDiagnostics.value());
-                      }
+                    auto EltDiagnostics =
+                        Diagnoser.diagnose(&Elt, Ctx, State.Env);
+                    if (EltDiagnostics.has_value()) {
+                      Diagnostics.push_back(EltDiagnostics.value());
                     }
                   })
               .withASTBuildArgs({"-fsyntax-only", "-std=c++17",