@@ -3515,15 +3515,33 @@ mod verify {
35153515 nonzero_check_checked_pow!( core:: num:: NonZeroI16 , nonzero_check_checked_pow_i16) ;
35163516 nonzero_check_checked_pow!( core:: num:: NonZeroI32 , nonzero_check_checked_pow_i32) ;
35173517 nonzero_check_checked_pow!( core:: num:: NonZeroI64 , nonzero_check_checked_pow_i64) ;
3518- nonzero_check_checked_pow!( core:: num:: NonZeroI128 , nonzero_check_checked_pow_i128) ;
35193518 nonzero_check_checked_pow!( core:: num:: NonZeroIsize , nonzero_check_checked_pow_isize) ;
35203519 nonzero_check_checked_pow!( core:: num:: NonZeroU8 , nonzero_check_checked_pow_u8) ;
35213520 nonzero_check_checked_pow!( core:: num:: NonZeroU16 , nonzero_check_checked_pow_u16) ;
35223521 nonzero_check_checked_pow!( core:: num:: NonZeroU32 , nonzero_check_checked_pow_u32) ;
35233522 nonzero_check_checked_pow!( core:: num:: NonZeroU64 , nonzero_check_checked_pow_u64) ;
3524- nonzero_check_checked_pow!( core:: num:: NonZeroU128 , nonzero_check_checked_pow_u128) ;
35253523 nonzero_check_checked_pow!( core:: num:: NonZeroUsize , nonzero_check_checked_pow_usize) ;
35263524
3525+ // 128-bit types use a bounded exponent to avoid CBMC timeout (same reason
3526+ // as nonzero_check_saturating_pow_128): checked_pow uses binary exponentiation
3527+ // with expensive 128-bit multiplications in CBMC's bitvector encoding.
3528+ macro_rules! nonzero_check_checked_pow_128 {
3529+ ( $nonzero_type: ty, $harness: ident) => {
3530+ #[ kani:: proof]
3531+ #[ kani:: unwind( 5 ) ]
3532+ pub fn $harness( ) {
3533+ let x: $nonzero_type = kani:: any( ) ;
3534+ let exp: u32 = kani:: any_where( |& e| e <= 10 ) ;
3535+ if let Some ( result) = x. checked_pow( exp) {
3536+ assert!( result. get( ) != 0 ) ;
3537+ }
3538+ }
3539+ } ;
3540+ }
3541+
3542+ nonzero_check_checked_pow_128!( core:: num:: NonZeroI128 , nonzero_check_checked_pow_i128) ;
3543+ nonzero_check_checked_pow_128!( core:: num:: NonZeroU128 , nonzero_check_checked_pow_u128) ;
3544+
35273545 macro_rules! nonzero_check_saturating_pow {
35283546 ( $nonzero_type: ty, $harness: ident) => {
35293547 #[ kani:: proof]
0 commit comments