@@ -1858,21 +1858,28 @@ mod verify {
1858
1858
1859
1859
#[ kani:: proof_for_contract( NonNull :: byte_offset_from) ]
1860
1860
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 ( ) ;
1863
1865
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
+ } ;
1867
1871
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
+ } ;
1870
1877
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 ( ) } ;
1873
1880
1874
1881
unsafe {
1875
- let result = ptr . byte_offset_from ( origin ) ;
1882
+ let result = ptr_nonnull . byte_offset_from ( origin_nonnull ) ;
1876
1883
}
1877
1884
}
1878
1885
}
0 commit comments