File tree 2 files changed +23
-1
lines changed
2 files changed +23
-1
lines changed Original file line number Diff line number Diff line change @@ -1947,6 +1947,17 @@ mod verify {
1947
1947
// Array size bound for PointerGenerator
1948
1948
const ARRAY_LEN : usize = 40 ;
1949
1949
1950
+ #[ kani:: proof]
1951
+ pub fn check_const_byte_offset_from_fixed_offset ( ) {
1952
+ let arr: [ u32 ; ARRAY_LEN ] = kani:: Arbitrary :: any_array ( ) ;
1953
+ let offset: usize = kani:: any_where ( |& x| x <= ARRAY_LEN ) ;
1954
+ let origin_ptr: * const u32 = arr. as_ptr ( ) ;
1955
+ let self_ptr: * const u32 = unsafe { origin_ptr. byte_offset ( offset as isize ) } ;
1956
+ let result: isize = unsafe { self_ptr. byte_offset_from ( origin_ptr) } ;
1957
+ assert_eq ! ( result, offset as isize ) ;
1958
+ assert_eq ! ( result, ( self_ptr. addr( ) as isize - origin_ptr. addr( ) as isize ) ) ;
1959
+ }
1960
+
1950
1961
macro_rules! generate_offset_from_harness {
1951
1962
( $type: ty, $proof_name1: ident, $proof_name2: ident) => {
1952
1963
// Proof for a single element
Original file line number Diff line number Diff line change @@ -2375,9 +2375,20 @@ mod verify {
2375
2375
use core:: mem;
2376
2376
use kani:: PointerGenerator ;
2377
2377
2378
- // bound space for PointerGenerator
2378
+ // bound space for PointerGenerator and arrays
2379
2379
const ARRAY_LEN : usize = 40 ;
2380
2380
2381
+ #[ kani:: proof]
2382
+ pub fn check_mut_byte_offset_from_fixed_offset ( ) {
2383
+ let mut arr: [ u32 ; ARRAY_LEN ] = kani:: Arbitrary :: any_array ( ) ;
2384
+ let offset: usize = kani:: any_where ( |& x| x <= ARRAY_LEN ) ;
2385
+ let origin_ptr: * mut u32 = arr. as_mut_ptr ( ) ;
2386
+ let self_ptr: * mut u32 = unsafe { origin_ptr. byte_offset ( offset as isize ) } ;
2387
+ let result: isize = unsafe { self_ptr. byte_offset_from ( origin_ptr) } ;
2388
+ assert_eq ! ( result, offset as isize ) ;
2389
+ assert_eq ! ( result, ( self_ptr. addr( ) as isize - origin_ptr. addr( ) as isize ) ) ;
2390
+ }
2391
+
2381
2392
// Proof for unit size
2382
2393
#[ kani:: proof_for_contract( <* mut ( ) >:: byte_offset_from) ]
2383
2394
pub fn check_mut_byte_offset_from_unit ( ) {
You can’t perform that action at this time.
0 commit comments