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",