File tree Expand file tree Collapse file tree 3 files changed +46
-3
lines changed Expand file tree Collapse file tree 3 files changed +46
-3
lines changed Original file line number Diff line number Diff line change @@ -595,7 +595,7 @@ jobs:
595595 args : " --package zerocopy --features __internal_use_only_features_that_work_on_stable --output-format=terse -Zfunction-contracts --randomize-layout --memory-safety-checks --overflow-checks --undefined-function-checks --unwinding-checks"
596596 # This version is automatically rolled by
597597 # `roll-pinned-toolchain-versions.yml`.
598- kani-version : 0.55 .0
598+ kani-version : 0.60 .0
599599
600600 # NEON intrinsics are currently broken on big-endian platforms. [1] This test ensures
601601 # that we don't accidentally attempt to compile these intrinsics on such platforms. We
Original file line number Diff line number Diff line change @@ -353,3 +353,46 @@ unsafe impl SplitByteSlice for cell::RefMut<'_, [u8]> {
353353 } )
354354 }
355355}
356+
357+ #[ cfg( kani) ]
358+ mod proofs {
359+ use super :: * ;
360+
361+ fn any_vec ( ) -> Vec < u8 > {
362+ let len = kani:: any ( ) ;
363+ kani:: assume ( len <= isize:: MAX as usize ) ;
364+ vec ! [ 0u8 ; len]
365+ }
366+
367+ #[ kani:: proof]
368+ fn prove_split_at_unchecked ( ) {
369+ let v = any_vec ( ) ;
370+ let slc = v. as_slice ( ) ;
371+ let mid = kani:: any ( ) ;
372+ kani:: assume ( mid <= slc. len ( ) ) ;
373+ let ( l, r) = unsafe { slc. split_at_unchecked ( mid) } ;
374+ assert_eq ! ( l. len( ) + r. len( ) , slc. len( ) ) ;
375+
376+ let slc: * const _ = slc;
377+ let l: * const _ = l;
378+ let r: * const _ = r;
379+
380+ assert_eq ! ( slc. cast:: <u8 >( ) , l. cast:: <u8 >( ) ) ;
381+ assert_eq ! ( unsafe { slc. cast:: <u8 >( ) . add( mid) } , r. cast:: <u8 >( ) ) ;
382+
383+ let mut v = any_vec ( ) ;
384+ let slc = v. as_mut_slice ( ) ;
385+ let len = slc. len ( ) ;
386+ let mid = kani:: any ( ) ;
387+ kani:: assume ( mid <= slc. len ( ) ) ;
388+ let ( l, r) = unsafe { slc. split_at_unchecked ( mid) } ;
389+ assert_eq ! ( l. len( ) + r. len( ) , len) ;
390+
391+ let l: * mut _ = l;
392+ let r: * mut _ = r;
393+ let slc: * mut _ = slc;
394+
395+ assert_eq ! ( slc. cast:: <u8 >( ) , l. cast:: <u8 >( ) ) ;
396+ assert_eq ! ( unsafe { slc. cast:: <u8 >( ) . add( mid) } , r. cast:: <u8 >( ) ) ;
397+ }
398+ }
Original file line number Diff line number Diff line change 302302 clippy:: arithmetic_side_effects,
303303 clippy:: indexing_slicing,
304304) ) ]
305- #![ cfg_attr( not( any( test, feature = "std" ) ) , no_std) ]
305+ #![ cfg_attr( not( any( test, kani , feature = "std" ) ) , no_std) ]
306306#![ cfg_attr(
307307 all( feature = "simd-nightly" , any( target_arch = "x86" , target_arch = "x86_64" ) ) ,
308308 feature( stdarch_x86_avx512)
@@ -377,7 +377,7 @@ use std::io;
377377
378378use crate :: pointer:: invariant:: { self , BecauseExclusive } ;
379379
380- #[ cfg( any( feature = "alloc" , test) ) ]
380+ #[ cfg( any( feature = "alloc" , test, kani ) ) ]
381381extern crate alloc;
382382#[ cfg( any( feature = "alloc" , test) ) ]
383383use alloc:: { boxed:: Box , vec:: Vec } ;
You can’t perform that action at this time.
0 commit comments