Skip to content

Commit 781cb87

Browse files
committed
Revert "unchecked_mul and unchecked_shr proofs (#7)"
This reverts commit 02d706a.
1 parent 3880fc7 commit 781cb87

File tree

3 files changed

+1
-75
lines changed

3 files changed

+1
-75
lines changed

library/core/src/num/int_macros.rs

-2
Original file line numberDiff line numberDiff line change
@@ -816,7 +816,6 @@ macro_rules! int_impl {
816816
without modifying the original"]
817817
#[inline(always)]
818818
#[cfg_attr(miri, track_caller)] // even without panics, this helps for Miri backtraces
819-
#[requires(!self.overflowing_mul(rhs).1)]
820819
pub const unsafe fn unchecked_mul(self, rhs: Self) -> Self {
821820
assert_unsafe_precondition!(
822821
check_language_ub,
@@ -1425,7 +1424,6 @@ macro_rules! int_impl {
14251424
#[rustc_const_unstable(feature = "unchecked_shifts", issue = "85122")]
14261425
#[inline(always)]
14271426
#[cfg_attr(miri, track_caller)] // even without panics, this helps for Miri backtraces
1428-
#[requires(rhs < <$ActualT>::BITS)] // i.e. requires the right hand side of the shift (rhs) to be less than the number of bits in the type. This prevents undefined behavior.
14291427
pub const unsafe fn unchecked_shr(self, rhs: u32) -> Self {
14301428
assert_unsafe_precondition!(
14311429
check_language_ub,

library/core/src/num/mod.rs

+1-71
Original file line numberDiff line numberDiff line change
@@ -1605,39 +1605,19 @@ mod verify {
16051605
}
16061606
}
16071607

1608-
macro_rules! generate_unchecked_mul_harness {
1609-
($type:ty, $method:ident, $harness_name:ident, $min:expr, $max:expr) => {
1610-
#[kani::proof_for_contract($type::$method)]
1611-
pub fn $harness_name() {
1612-
let num1: $type = kani::any();
1613-
let num2: $type = kani::any();
1614-
1615-
// Limit the values of num1 and num2 to the specified range for multiplication
1616-
kani::assume(num1 >= $min && num1 <= $max);
1617-
kani::assume(num2 >= $min && num2 <= $max);
1618-
1619-
unsafe {
1620-
num1.$method(num2);
1621-
}
1622-
}
1623-
}
1624-
}
1625-
1626-
16271608
macro_rules! generate_unchecked_shift_harness {
16281609
($type:ty, $method:ident, $harness_name:ident) => {
16291610
#[kani::proof_for_contract($type::$method)]
16301611
pub fn $harness_name() {
16311612
let num1: $type = kani::any::<$type>();
16321613
let num2: u32 = kani::any::<u32>();
1633-
1614+
16341615
unsafe {
16351616
num1.$method(num2);
16361617
}
16371618
}
16381619
}
16391620
}
1640-
16411621

16421622
macro_rules! generate_unchecked_neg_harness {
16431623
($type:ty, $method:ident, $harness_name:ident) => {
@@ -1674,54 +1654,4 @@ mod verify {
16741654
generate_unchecked_math_harness!(u64, unchecked_add, checked_unchecked_add_u64);
16751655
generate_unchecked_math_harness!(u128, unchecked_add, checked_unchecked_add_u128);
16761656
generate_unchecked_math_harness!(usize, unchecked_add, checked_unchecked_add_usize);
1677-
1678-
// unchecked_mul proofs
1679-
//
1680-
// Target types:
1681-
// i{8,16,32,64,128, size} and u{8,16,32,64,128, size} -- 12 types in total
1682-
//
1683-
// Target contracts:
1684-
// #[requires(!self.overflowing_mul(rhs).1)]
1685-
//
1686-
// Target function:
1687-
// pub const unsafe fn unchecked_mul(self, rhs: Self) -> Self
1688-
// exponential state spaces for 32,64 and 128, hence provided limited range for verification.
1689-
generate_unchecked_math_harness!(i8, unchecked_mul, checked_unchecked_mul_i8);
1690-
generate_unchecked_math_harness!(i16, unchecked_mul, checked_unchecked_mul_i16);
1691-
generate_unchecked_mul_harness!(i32, unchecked_mul, checked_unchecked_mul_i32, -10_000i32, 10_000i32);
1692-
generate_unchecked_mul_harness!(i64, unchecked_mul, checked_unchecked_mul_i64, -1_000i64, 1_000i64);
1693-
generate_unchecked_mul_harness!(i128, unchecked_mul, checked_unchecked_mul_i128, -1_000_000_000_000_000i128, 1_000_000_000_000_000i128);
1694-
generate_unchecked_mul_harness!(isize, unchecked_mul, checked_unchecked_mul_isize, -100_000isize, 100_000isize);
1695-
generate_unchecked_math_harness!(u8, unchecked_mul, checked_unchecked_mul_u8);
1696-
generate_unchecked_math_harness!(u16, unchecked_mul, checked_unchecked_mul_u16);
1697-
generate_unchecked_mul_harness!(u32, unchecked_mul, checked_unchecked_mul_u32, 0u32, 20_000u32);
1698-
generate_unchecked_mul_harness!(u64, unchecked_mul, checked_unchecked_mul_u64, 0u64, 2_000u64);
1699-
generate_unchecked_mul_harness!(u128, unchecked_mul, checked_unchecked_mul_u128, 0u128, 1_000_000_000_000_000u128);
1700-
generate_unchecked_mul_harness!(usize, unchecked_mul, checked_unchecked_mul_usize, 0usize, 100_000usize);
1701-
1702-
1703-
// unchecked_shr proofs
1704-
//
1705-
// Target types:
1706-
// i{8,16,32,64,128,size} and u{8,16,32,64,128,size} -- 12 types in total
1707-
//
1708-
// Target contracts:
1709-
// #[requires(rhs < <$ActualT>::BITS)]
1710-
//
1711-
// Target function:
1712-
// pub const unsafe fn unchecked_shr(self, rhs: u32) -> Self
1713-
generate_unchecked_shift_harness!(i8, unchecked_shr, checked_unchecked_shr_i8);
1714-
generate_unchecked_shift_harness!(i16, unchecked_shr, checked_unchecked_shr_i16);
1715-
generate_unchecked_shift_harness!(i32, unchecked_shr, checked_unchecked_shr_i32);
1716-
generate_unchecked_shift_harness!(i64, unchecked_shr, checked_unchecked_shr_i64);
1717-
generate_unchecked_shift_harness!(i128, unchecked_shr, checked_unchecked_shr_i128);
1718-
generate_unchecked_shift_harness!(isize, unchecked_shr, checked_unchecked_shr_isize);
1719-
generate_unchecked_shift_harness!(u8, unchecked_shr, checked_unchecked_shr_u8);
1720-
generate_unchecked_shift_harness!(u16, unchecked_shr, checked_unchecked_shr_u16);
1721-
generate_unchecked_shift_harness!(u32, unchecked_shr, checked_unchecked_shr_u32);
1722-
generate_unchecked_shift_harness!(u64, unchecked_shr, checked_unchecked_shr_u64);
1723-
generate_unchecked_shift_harness!(u128, unchecked_shr, checked_unchecked_shr_u128);
1724-
generate_unchecked_shift_harness!(usize, unchecked_shr, checked_unchecked_shr_usize);
1725-
}
1726-
}
17271657
}

library/core/src/num/uint_macros.rs

-2
Original file line numberDiff line numberDiff line change
@@ -908,7 +908,6 @@ macro_rules! uint_impl {
908908
without modifying the original"]
909909
#[inline(always)]
910910
#[cfg_attr(miri, track_caller)] // even without panics, this helps for Miri backtraces
911-
#[requires(!self.overflowing_mul(rhs).1)]
912911
pub const unsafe fn unchecked_mul(self, rhs: Self) -> Self {
913912
assert_unsafe_precondition!(
914913
check_language_ub,
@@ -1614,7 +1613,6 @@ macro_rules! uint_impl {
16141613
#[rustc_const_unstable(feature = "unchecked_shifts", issue = "85122")]
16151614
#[inline(always)]
16161615
#[cfg_attr(miri, track_caller)] // even without panics, this helps for Miri backtraces
1617-
#[requires(rhs < <$ActualT>::BITS)]// i.e. requires the right hand side of the shift (rhs) to be less than the number of bits in the type. This prevents undefined behavior.
16181616
pub const unsafe fn unchecked_shr(self, rhs: u32) -> Self {
16191617
assert_unsafe_precondition!(
16201618
check_language_ub,

0 commit comments

Comments
 (0)