rapx/verify/smt_check/
non_null.rs1use super::common::{SmtCheckResult, SmtChecker, SmtObligation};
20use crate::verify::{contract::Property, helpers::Checkpoint, verifier::ForwardVisitResult};
21
22pub(crate) fn check<'tcx>(
24 checker: &SmtChecker<'tcx>,
25 checkpoint: &Checkpoint<'tcx>,
26 property: &Property<'tcx>,
27 forward: &ForwardVisitResult<'tcx>,
28) -> SmtCheckResult {
29 if checkpoint.is_ref {
30 return SmtCheckResult::proved("NonNull trivially holds for ref-derived pointer");
31 }
32 let Some(target) = checker.property_target(checkpoint, property) else {
33 return SmtCheckResult::unknown("NonNull target could not be resolved");
34 };
35
36 let obligation = SmtObligation::NonZero { place: target };
37 checker.prove_obligation(checkpoint, forward, obligation)
38}