Skip to content

Commit 459a692

Browse files
refactor proof harness with pointer generator for byte_offset_from
1 parent 7ce2d89 commit 459a692

File tree

1 file changed

+17
-10
lines changed

1 file changed

+17
-10
lines changed

library/core/src/ptr/non_null.rs

+17-10
Original file line numberDiff line numberDiff line change
@@ -1858,21 +1858,28 @@ mod verify {
18581858

18591859
#[kani::proof_for_contract(NonNull::byte_offset_from)]
18601860
pub fn non_null_byte_offset_from_proof() {
1861-
const ARR_SIZE: usize = 100000;
1862-
let arr: [i32; ARR_SIZE] = kani::any();
1861+
use kani::PointerGenerator;
1862+
const SIZE: usize = mem::size_of::<i32>();
1863+
let mut generator1 = PointerGenerator::<SIZE>::new();
1864+
let mut generator2 = PointerGenerator::<SIZE>::new();
18631865

1864-
// Randomly generate offsets for the pointers
1865-
let offset = kani::any_where(|x| *x <= ARR_SIZE);
1866-
let origin_offset = kani::any_where(|x| *x <= ARR_SIZE);
1866+
let ptr: *mut i32 = if kani::any() {
1867+
generator1.any_in_bounds().ptr as *mut i32
1868+
} else {
1869+
generator2.any_in_bounds().ptr as *mut i32
1870+
};
18671871

1868-
let raw_ptr: *mut i32 = arr.as_ptr() as *mut i32;
1869-
let origin_ptr: *mut i32 = arr.as_ptr() as *mut i32;
1872+
let origin: *mut i32 = if kani::any() {
1873+
generator1.any_in_bounds().ptr as *mut i32
1874+
} else {
1875+
generator2.any_in_bounds().ptr as *mut i32
1876+
};
18701877

1871-
let ptr = unsafe { NonNull::new(raw_ptr.add(offset)).unwrap() };
1872-
let origin = unsafe { NonNull::new(origin_ptr.add(origin_offset)).unwrap() };
1878+
let ptr_nonnull = unsafe { NonNull::new(ptr).unwrap() };
1879+
let origin_nonnull = unsafe { NonNull::new(origin).unwrap() };
18731880

18741881
unsafe {
1875-
let result = ptr.byte_offset_from(origin);
1882+
let result = ptr_nonnull.byte_offset_from(origin_nonnull);
18761883
}
18771884
}
18781885
}

0 commit comments

Comments
 (0)