Refactor NotNull constraint to be Null instead.
This is just a stylistic change to reduce unnecessary negations :)
PiperOrigin-RevId: 487822332
diff --git a/nullability_verification/pointer_nullability.cc b/nullability_verification/pointer_nullability.cc
index 04ba12b..83453df 100644
--- a/nullability_verification/pointer_nullability.cc
+++ b/nullability_verification/pointer_nullability.cc
@@ -19,9 +19,9 @@
/// The nullness information of a pointer is represented by two properties
/// which indicate if a pointer's nullability (i.e., if the pointer can hold
-/// null) is `Known` and if the pointer's value is `NotNull`.
+/// null) is `Known` and if the pointer's value is `Null`.
constexpr llvm::StringLiteral kKnown = "is_known";
-constexpr llvm::StringLiteral kNotNull = "is_notnull";
+constexpr llvm::StringLiteral kNull = "is_null";
NullabilityKind getNullabilityKind(QualType Type, ASTContext& Ctx) {
return Type->getNullability(Ctx).value_or(NullabilityKind::Unspecified);
@@ -36,9 +36,8 @@
std::pair<AtomicBoolValue&, AtomicBoolValue&> getPointerNullState(
const PointerValue& PointerVal, const Environment& Env) {
auto& PointerKnown = *cast<AtomicBoolValue>(PointerVal.getProperty(kKnown));
- auto& PointerNotNull =
- *cast<AtomicBoolValue>(PointerVal.getProperty(kNotNull));
- return {PointerKnown, PointerNotNull};
+ auto& PointerNull = *cast<AtomicBoolValue>(PointerVal.getProperty(kNull));
+ return {PointerKnown, PointerNull};
}
void initPointerBoolProperty(PointerValue& PointerVal, llvm::StringRef Name,
@@ -51,15 +50,15 @@
void initPointerNullState(PointerValue& PointerVal, Environment& Env,
BoolValue* KnownConstraint,
- BoolValue* NotNullConstraint) {
+ BoolValue* NullConstraint) {
initPointerBoolProperty(PointerVal, kKnown, KnownConstraint, Env);
- initPointerBoolProperty(PointerVal, kNotNull, NotNullConstraint, Env);
+ initPointerBoolProperty(PointerVal, kNull, NullConstraint, Env);
}
bool isNullable(const PointerValue& PointerVal, const Environment& Env) {
- auto [PointerKnown, PointerNotNull] = getPointerNullState(PointerVal, Env);
+ auto [PointerKnown, PointerNull] = getPointerNullState(PointerVal, Env);
auto& PointerNotKnownNull =
- Env.makeNot(Env.makeAnd(PointerKnown, Env.makeNot(PointerNotNull)));
+ Env.makeNot(Env.makeAnd(PointerKnown, PointerNull));
return !Env.flowConditionImplies(PointerNotKnownNull);
}
diff --git a/nullability_verification/pointer_nullability.h b/nullability_verification/pointer_nullability.h
index 1f8fc70..9b711bd 100644
--- a/nullability_verification/pointer_nullability.h
+++ b/nullability_verification/pointer_nullability.h
@@ -37,39 +37,39 @@
/// Sets the nullness properties on `PointerVal` if not already initialised.
///
/// The boolean properties may be constrained by specifying `KnownConstraint`
-/// and `NotNullConstraint`. Otherwise, the properties are set to freshly
+/// and `NullConstraint`. Otherwise, the properties are set to freshly
/// created atomic booleans.
void initPointerNullState(dataflow::PointerValue& PointerVal,
dataflow::Environment& Env,
dataflow::BoolValue* KnownConstraint = nullptr,
- dataflow::BoolValue* NotNullConstraint = nullptr);
+ dataflow::BoolValue* NullConstraint = nullptr);
/// Sets the nullness properties on `PointerVal` representing a nullptr if not
/// already initialised.
///
-/// `Known` is constrained to true, `NotNull` is constrained to false.
+/// `Known` is constrained to true, `Null` is constrained to true.
inline void initNullPointer(dataflow::PointerValue& PointerVal,
dataflow::Environment& Env) {
initPointerNullState(PointerVal, Env,
/*KnownConstraint=*/&Env.getBoolLiteralValue(true),
- /*NotNullConstraint=*/&Env.getBoolLiteralValue(false));
+ /*NullConstraint=*/&Env.getBoolLiteralValue(true));
}
/// Sets the nullness properties on `PointerVal` representing a pointer that is
/// not null if not already initialised.
///
-/// `Known` is constrained to true, `NotNull` is constrained to true.
+/// `Known` is constrained to true, `Null` is constrained to false.
inline void initNotNullPointer(dataflow::PointerValue& PointerVal,
dataflow::Environment& Env) {
initPointerNullState(PointerVal, Env,
/*KnownConstraint=*/&Env.getBoolLiteralValue(true),
- /*NotNullConstraint=*/&Env.getBoolLiteralValue(true));
+ /*NullConstraint=*/&Env.getBoolLiteralValue(false));
}
/// Sets the nullness properties on `PointerVal` representing a pointer that is
/// nullable if not already initialised.
///
-/// `Known` is constrained to true, `NotNull` is unconstrained.
+/// `Known` is constrained to true, `Null` is unconstrained.
inline void initNullablePointer(dataflow::PointerValue& PointerVal,
dataflow::Environment& Env) {
initPointerNullState(PointerVal, Env,
@@ -79,7 +79,7 @@
/// Sets the nullness properties on `PointerVal` representing a pointer with
/// unknown nullability if not already initialised.
///
-/// `Known` is constrained to false, `NotNull` is unconstrained.
+/// `Known` is constrained to false, `Null` is unconstrained.
inline void initUnknownPointer(dataflow::PointerValue& PointerVal,
dataflow::Environment& Env) {
initPointerNullState(PointerVal, Env,
diff --git a/nullability_verification/pointer_nullability_analysis.cc b/nullability_verification/pointer_nullability_analysis.cc
index e348993..9bc9720 100644
--- a/nullability_verification/pointer_nullability_analysis.cc
+++ b/nullability_verification/pointer_nullability_analysis.cc
@@ -103,14 +103,14 @@
if (!LHS || !RHS) return;
- auto [LHSKnown, LHSNotNull] = getPointerNullState(*LHS, State.Env);
- auto [RHSKnown, RHSNotNull] = getPointerNullState(*RHS, State.Env);
- auto& LHSKnownNotNull = State.Env.makeAnd(LHSKnown, LHSNotNull);
- auto& RHSKnownNotNull = State.Env.makeAnd(RHSKnown, RHSNotNull);
- auto& LHSKnownNull =
- State.Env.makeAnd(LHSKnown, State.Env.makeNot(LHSNotNull));
- auto& RHSKnownNull =
- State.Env.makeAnd(RHSKnown, State.Env.makeNot(RHSNotNull));
+ auto [LHSKnown, LHSNull] = getPointerNullState(*LHS, State.Env);
+ auto [RHSKnown, RHSNull] = getPointerNullState(*RHS, State.Env);
+ auto& LHSKnownNotNull =
+ State.Env.makeAnd(LHSKnown, State.Env.makeNot(LHSNull));
+ auto& RHSKnownNotNull =
+ State.Env.makeAnd(RHSKnown, State.Env.makeNot(RHSNull));
+ auto& LHSKnownNull = State.Env.makeAnd(LHSKnown, LHSNull);
+ auto& RHSKnownNull = State.Env.makeAnd(RHSKnown, RHSNull);
// nullptr == nullptr
State.Env.addToFlowCondition(State.Env.makeImplication(
@@ -130,10 +130,10 @@
getPointerValueFromExpr(CastExpr->IgnoreImplicit(), State.Env);
if (!PointerVal) return;
- auto [PointerKnown, PointerNotNull] =
+ auto [PointerKnown, PointerNull] =
getPointerNullState(*PointerVal, State.Env);
auto& CastExprLoc = State.Env.createStorageLocation(*CastExpr);
- State.Env.setValue(CastExprLoc, PointerNotNull);
+ State.Env.setValue(CastExprLoc, State.Env.makeNot(PointerNull));
State.Env.setStorageLocation(*CastExpr, CastExprLoc);
}
@@ -226,14 +226,13 @@
return false;
}
- auto [Known1, NotNull1] = getPointerNullState(cast<PointerValue>(Val1), Env1);
- auto [Known2, NotNull2] = getPointerNullState(cast<PointerValue>(Val2), Env2);
+ auto [Known1, Null1] = getPointerNullState(cast<PointerValue>(Val1), Env1);
+ auto [Known2, Null2] = getPointerNullState(cast<PointerValue>(Val2), Env2);
auto& Known = mergeBoolValues(Known1, Env1, Known2, Env2, MergedEnv);
- auto& NotNull = mergeBoolValues(NotNull1, Env1, NotNull2, Env2, MergedEnv);
+ auto& Null = mergeBoolValues(Null1, Env1, Null2, Env2, MergedEnv);
- initPointerNullState(cast<PointerValue>(MergedVal), MergedEnv, &Known,
- &NotNull);
+ initPointerNullState(cast<PointerValue>(MergedVal), MergedEnv, &Known, &Null);
return true;
}