Rename transfer functions to distinguish between flow-sensitive and non-flow-sensitive nullability analysis.
PiperOrigin-RevId: 499174378
diff --git a/nullability_verification/pointer_nullability_analysis.cc b/nullability_verification/pointer_nullability_analysis.cc
index 2ce3a38..7353288 100644
--- a/nullability_verification/pointer_nullability_analysis.cc
+++ b/nullability_verification/pointer_nullability_analysis.cc
@@ -368,25 +368,25 @@
}
}
-void transferNullPointer(const Expr* NullPointer,
- const MatchFinder::MatchResult&,
- TransferState<PointerNullabilityLattice>& State) {
+void transferFlowSensitiveNullPointer(
+ const Expr* NullPointer, const MatchFinder::MatchResult&,
+ TransferState<PointerNullabilityLattice>& State) {
if (auto* PointerVal = getPointerValueFromExpr(NullPointer, State.Env)) {
initNullPointer(*PointerVal, State.Env);
}
}
-void transferNotNullPointer(const Expr* NotNullPointer,
- const MatchFinder::MatchResult&,
- TransferState<PointerNullabilityLattice>& State) {
+void transferFlowSensitiveNotNullPointer(
+ const Expr* NotNullPointer, const MatchFinder::MatchResult&,
+ TransferState<PointerNullabilityLattice>& State) {
if (auto* PointerVal = getPointerValueFromExpr(NotNullPointer, State.Env)) {
initNotNullPointer(*PointerVal, State.Env);
}
}
-void transferPointer(const Expr* PointerExpr,
- const MatchFinder::MatchResult& Result,
- TransferState<PointerNullabilityLattice>& State) {
+void transferFlowSensitivePointer(
+ const Expr* PointerExpr, const MatchFinder::MatchResult& Result,
+ TransferState<PointerNullabilityLattice>& State) {
if (auto* PointerVal = getPointerValueFromExpr(PointerExpr, State.Env)) {
initPointerFromAnnotations(*PointerVal, PointerExpr, State);
}
@@ -395,7 +395,7 @@
// TODO(b/233582219): Implement promotion of nullability knownness for initially
// unknown pointers when there is evidence that it is nullable, for example
// when the pointer is compared to nullptr, or casted to boolean.
-void transferNullCheckComparison(
+void transferFlowSensitiveNullCheckComparison(
const BinaryOperator* BinaryOp, const MatchFinder::MatchResult& result,
TransferState<PointerNullabilityLattice>& State) {
// Boolean representing the comparison between the two pointer values,
@@ -436,7 +436,7 @@
State.Env.makeAnd(LHSKnownNotNull, RHSKnownNull), PointerNE));
}
-void transferNullCheckImplicitCastPtrToBool(
+void transferFlowSensitiveNullCheckImplicitCastPtrToBool(
const Expr* CastExpr, const MatchFinder::MatchResult&,
TransferState<PointerNullabilityLattice>& State) {
auto* PointerVal =
@@ -450,9 +450,9 @@
State.Env.setStorageLocation(*CastExpr, CastExprLoc);
}
-void transferCallExpr(const CallExpr* CallExpr,
- const MatchFinder::MatchResult& Result,
- TransferState<PointerNullabilityLattice>& State) {
+void transferFlowSensitiveCallExpr(
+ const CallExpr* CallExpr, const MatchFinder::MatchResult& Result,
+ TransferState<PointerNullabilityLattice>& State) {
auto ReturnType = CallExpr->getType();
if (!ReturnType->isAnyPointerType()) return;
@@ -466,19 +466,19 @@
initPointerFromAnnotations(*PointerVal, CallExpr, State);
}
-void transferDeclRefExpr(const DeclRefExpr* DRE,
- const MatchFinder::MatchResult& MR,
- TransferState<PointerNullabilityLattice>& State) {
+void transferNonFlowSensitiveDeclRefExpr(
+ const DeclRefExpr* DRE, const MatchFinder::MatchResult& MR,
+ TransferState<PointerNullabilityLattice>& State) {
State.Lattice.insertExprNullabilityIfAbsent(
DRE, [&]() { return getNullabilityAnnotationsFromType(DRE->getType()); });
if (DRE->getType()->isPointerType()) {
- transferPointer(DRE, MR, State);
+ transferFlowSensitivePointer(DRE, MR, State);
}
}
-void transferMemberExpr(const MemberExpr* ME,
- const MatchFinder::MatchResult& MR,
- TransferState<PointerNullabilityLattice>& State) {
+void transferNonFlowSensitiveMemberExpr(
+ const MemberExpr* ME, const MatchFinder::MatchResult& MR,
+ TransferState<PointerNullabilityLattice>& State) {
State.Lattice.insertExprNullabilityIfAbsent(ME, [&]() {
auto BaseNullability = State.Lattice.getExprNullability(ME->getBase());
if (BaseNullability.has_value()) {
@@ -495,32 +495,34 @@
}
});
if (ME->getType()->isPointerType()) {
- transferPointer(ME, MR, State);
+ transferFlowSensitivePointer(ME, MR, State);
}
}
auto buildNonFlowSensitiveTransferer() {
return CFGMatchSwitchBuilder<TransferState<PointerNullabilityLattice>>()
.CaseOfCFGStmt<DeclRefExpr>(ast_matchers::declRefExpr(),
- transferDeclRefExpr)
- .CaseOfCFGStmt<MemberExpr>(ast_matchers::memberExpr(), transferMemberExpr)
+ transferNonFlowSensitiveDeclRefExpr)
+ .CaseOfCFGStmt<MemberExpr>(ast_matchers::memberExpr(),
+ transferNonFlowSensitiveMemberExpr)
.Build();
}
auto buildFlowSensitiveTransferer() {
return CFGMatchSwitchBuilder<TransferState<PointerNullabilityLattice>>()
// Handles initialization of the null states of pointers.
- .CaseOfCFGStmt<Expr>(isCXXThisExpr(), transferNotNullPointer)
- .CaseOfCFGStmt<Expr>(isAddrOf(), transferNotNullPointer)
- .CaseOfCFGStmt<Expr>(isNullPointerLiteral(), transferNullPointer)
- .CaseOfCFGStmt<CallExpr>(isCallExpr(), transferCallExpr)
- .CaseOfCFGStmt<Expr>(isPointerExpr(), transferPointer)
+ .CaseOfCFGStmt<Expr>(isCXXThisExpr(), transferFlowSensitiveNotNullPointer)
+ .CaseOfCFGStmt<Expr>(isAddrOf(), transferFlowSensitiveNotNullPointer)
+ .CaseOfCFGStmt<Expr>(isNullPointerLiteral(),
+ transferFlowSensitiveNullPointer)
+ .CaseOfCFGStmt<CallExpr>(isCallExpr(), transferFlowSensitiveCallExpr)
+ .CaseOfCFGStmt<Expr>(isPointerExpr(), transferFlowSensitivePointer)
// Handles comparison between 2 pointers.
.CaseOfCFGStmt<BinaryOperator>(isPointerCheckBinOp(),
- transferNullCheckComparison)
+ transferFlowSensitiveNullCheckComparison)
// Handles checking of pointer as boolean.
.CaseOfCFGStmt<Expr>(isImplicitCastPointerToBool(),
- transferNullCheckImplicitCastPtrToBool)
+ transferFlowSensitiveNullCheckImplicitCastPtrToBool)
.Build();
}
} // namespace