Check that assignment to parameters in function calls are null-safe.
For example, it is unsafe to pass a nullable value as a nonnull parameter.
```
void foo(int * _Nonnull x);
int * _Nullable x = ...;
foo(x); // Unsafe
```
PiperOrigin-RevId: 468782730
diff --git a/nullability_verification/pointer_nullability.cc b/nullability_verification/pointer_nullability.cc
index 09a0f1f..c53dfd9 100644
--- a/nullability_verification/pointer_nullability.cc
+++ b/nullability_verification/pointer_nullability.cc
@@ -52,6 +52,13 @@
initPointerBoolProperty(PointerVal, kNotNull, NotNullConstraint, Env);
}
+bool isNullable(const PointerValue& PointerVal, const Environment& Env) {
+ auto [PointerKnown, PointerNotNull] = getPointerNullState(PointerVal, Env);
+ auto& PointerNotKnownNull =
+ Env.makeNot(Env.makeAnd(PointerKnown, Env.makeNot(PointerNotNull)));
+ return !Env.flowConditionImplies(PointerNotKnownNull);
+}
+
} // namespace nullability
} // namespace tidy
} // namespace clang