@@ -2218,6 +2218,97 @@ impl<T: ?Sized> PartialOrd for *mut T {
22182218#[ unstable( feature = "kani" , issue = "none" ) ]
22192219mod verify {
22202220 use crate :: kani;
2221+
2222+ // fn <*mut T>::add verification begin
2223+ macro_rules! generate_add_harness {
2224+ ( $type: ty, $proof_name: ident) => {
2225+ #[ allow( unused) ]
2226+ #[ kani:: proof_for_contract( <* mut $type>:: add) ]
2227+ pub fn $proof_name( ) {
2228+ let mut test_val: $type = kani:: any:: <$type>( ) ;
2229+ let test_ptr: * mut $type = & mut test_val;
2230+ let count: usize = kani:: any( ) ;
2231+ unsafe {
2232+ test_ptr. add( count) ;
2233+ }
2234+ }
2235+ } ;
2236+ }
2237+
2238+ generate_add_harness ! ( i8 , check_mut_add_i8) ;
2239+ generate_add_harness ! ( i16 , check_mut_add_i16) ;
2240+ generate_add_harness ! ( i32 , check_mut_add_i32) ;
2241+ generate_add_harness ! ( i64 , check_mut_add_i64) ;
2242+ generate_add_harness ! ( i128 , check_mut_add_i128) ;
2243+ generate_add_harness ! ( isize , check_mut_add_isize) ;
2244+ generate_add_harness ! ( u8 , check_mut_add_u8) ;
2245+ generate_add_harness ! ( u16 , check_mut_add_u16) ;
2246+ generate_add_harness ! ( u32 , check_mut_add_u32) ;
2247+ generate_add_harness ! ( u64 , check_mut_add_u64) ;
2248+ generate_add_harness ! ( u128 , check_mut_add_u128) ;
2249+ generate_add_harness ! ( usize , check_mut_add_usize) ;
2250+ // fn <*mut T>::add verification end
2251+
2252+ // fn <*mut T>::sub verification begin
2253+ macro_rules! generate_sub_harness {
2254+ ( $type: ty, $proof_name: ident) => {
2255+ #[ allow( unused) ]
2256+ #[ kani:: proof_for_contract( <* mut $type>:: sub) ]
2257+ pub fn $proof_name( ) {
2258+ let mut test_val: $type = kani:: any:: <$type>( ) ;
2259+ let test_ptr: * mut $type = & mut test_val;
2260+ let count: usize = kani:: any( ) ;
2261+ unsafe {
2262+ test_ptr. sub( count) ;
2263+ }
2264+ }
2265+ } ;
2266+ }
2267+
2268+ generate_sub_harness ! ( i8 , check_mut_sub_i8) ;
2269+ generate_sub_harness ! ( i16 , check_mut_sub_i16) ;
2270+ generate_sub_harness ! ( i32 , check_mut_sub_i32) ;
2271+ generate_sub_harness ! ( i64 , check_mut_sub_i64) ;
2272+ generate_sub_harness ! ( i128 , check_mut_sub_i128) ;
2273+ generate_sub_harness ! ( isize , check_mut_sub_isize) ;
2274+ generate_sub_harness ! ( u8 , check_mut_sub_u8) ;
2275+ generate_sub_harness ! ( u16 , check_mut_sub_u16) ;
2276+ generate_sub_harness ! ( u32 , check_mut_sub_u32) ;
2277+ generate_sub_harness ! ( u64 , check_mut_sub_u64) ;
2278+ generate_sub_harness ! ( u128 , check_mut_sub_u128) ;
2279+ generate_sub_harness ! ( usize , check_mut_sub_usize) ;
2280+ // fn <*mut T>::sub verification end
2281+
2282+ // fn <*mut T>::offset verification begin
2283+ macro_rules! generate_offset_harness {
2284+ ( $type: ty, $proof_name: ident) => {
2285+ #[ allow( unused) ]
2286+ #[ kani:: proof_for_contract( <* mut $type>:: offset) ]
2287+ pub fn $proof_name( ) {
2288+ let mut test_val: $type = kani:: any:: <$type>( ) ;
2289+ let test_ptr: * mut $type = & mut test_val;
2290+ let count: isize = kani:: any( ) ;
2291+ unsafe {
2292+ test_ptr. offset( count) ;
2293+ }
2294+ }
2295+ } ;
2296+ }
2297+
2298+ generate_offset_harness ! ( i8 , check_mut_offset_i8) ;
2299+ generate_offset_harness ! ( i16 , check_mut_offset_i16) ;
2300+ generate_offset_harness ! ( i32 , check_mut_offset_i32) ;
2301+ generate_offset_harness ! ( i64 , check_mut_offset_i64) ;
2302+ generate_offset_harness ! ( i128 , check_mut_offset_i128) ;
2303+ generate_offset_harness ! ( isize , check_mut_offset_isize) ;
2304+ generate_offset_harness ! ( u8 , check_mut_offset_u8) ;
2305+ generate_offset_harness ! ( u16 , check_mut_offset_u16) ;
2306+ generate_offset_harness ! ( u32 , check_mut_offset_u32) ;
2307+ generate_offset_harness ! ( u64 , check_mut_offset_u64) ;
2308+ generate_offset_harness ! ( u128 , check_mut_offset_u128) ;
2309+ generate_offset_harness ! ( usize , check_mut_offset_usize) ;
2310+ // fn <*mut T>::offset verification end
2311+
22212312 macro_rules! generate_unit_harness {
22222313 ( $fn_name: ident, $proof_name: ident) => {
22232314 #[ allow( unused) ]
0 commit comments