Skip to content

Commit dcc1959

Browse files
committed
Revert "Use autoharness for num::<impl *>::unchecked_sh{l,r}"
This reverts commit 2144ebe.
1 parent 3aefe47 commit dcc1959

File tree

2 files changed

+63
-12
lines changed

2 files changed

+63
-12
lines changed

.github/workflows/kani.yml

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -82,18 +82,6 @@ jobs:
8282
--include-pattern alloc::layout::Layout::from_size_align \
8383
--include-pattern ascii::ascii_char::AsciiChar::from_u8 \
8484
--include-pattern char::convert::from_u32_unchecked \
85-
--include-pattern "num::<impl i8>::unchecked_sh" \
86-
--include-pattern "num::<impl i16>::unchecked_sh" \
87-
--include-pattern "num::<impl i32>::unchecked_sh" \
88-
--include-pattern "num::<impl i64>::unchecked_sh" \
89-
--include-pattern "num::<impl i128>::unchecked_sh" \
90-
--include-pattern "num::<impl isize>::unchecked_sh" \
91-
--include-pattern "num::<impl u8>::unchecked_sh" \
92-
--include-pattern "num::<impl u16>::unchecked_sh" \
93-
--include-pattern "num::<impl u32>::unchecked_sh" \
94-
--include-pattern "num::<impl u64>::unchecked_sh" \
95-
--include-pattern "num::<impl u128>::unchecked_sh" \
96-
--include-pattern "num::<impl usize>::unchecked_sh" \
9785
--include-pattern "num::<impl i8>::wrapping_sh" \
9886
--include-pattern "num::<impl i16>::wrapping_sh" \
9987
--include-pattern "num::<impl i32>::wrapping_sh" \

library/core/src/num/mod.rs

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1651,6 +1651,21 @@ mod verify {
16511651
}
16521652
}
16531653

1654+
// Verify `unchecked_{shl, shr}`
1655+
macro_rules! generate_unchecked_shift_harness {
1656+
($type:ty, $method:ident, $harness_name:ident) => {
1657+
#[kani::proof_for_contract($type::$method)]
1658+
pub fn $harness_name() {
1659+
let num1: $type = kani::any::<$type>();
1660+
let num2: u32 = kani::any::<u32>();
1661+
1662+
unsafe {
1663+
num1.$method(num2);
1664+
}
1665+
}
1666+
};
1667+
}
1668+
16541669
macro_rules! generate_unchecked_neg_harness {
16551670
($type:ty, $harness_name:ident) => {
16561671
#[kani::proof_for_contract($type::unchecked_neg)]
@@ -1950,6 +1965,54 @@ mod verify {
19501965
usize::MAX
19511966
);
19521967

1968+
// unchecked_shr proofs
1969+
//
1970+
// Target types:
1971+
// i{8,16,32,64,128,size} and u{8,16,32,64,128,size} -- 12 types in total
1972+
//
1973+
// Target contracts:
1974+
// #[requires(rhs < <$ActualT>::BITS)]
1975+
//
1976+
// Target function:
1977+
// pub const unsafe fn unchecked_shr(self, rhs: u32) -> Self
1978+
generate_unchecked_shift_harness!(i8, unchecked_shr, checked_unchecked_shr_i8);
1979+
generate_unchecked_shift_harness!(i16, unchecked_shr, checked_unchecked_shr_i16);
1980+
generate_unchecked_shift_harness!(i32, unchecked_shr, checked_unchecked_shr_i32);
1981+
generate_unchecked_shift_harness!(i64, unchecked_shr, checked_unchecked_shr_i64);
1982+
generate_unchecked_shift_harness!(i128, unchecked_shr, checked_unchecked_shr_i128);
1983+
generate_unchecked_shift_harness!(isize, unchecked_shr, checked_unchecked_shr_isize);
1984+
generate_unchecked_shift_harness!(u8, unchecked_shr, checked_unchecked_shr_u8);
1985+
generate_unchecked_shift_harness!(u16, unchecked_shr, checked_unchecked_shr_u16);
1986+
generate_unchecked_shift_harness!(u32, unchecked_shr, checked_unchecked_shr_u32);
1987+
generate_unchecked_shift_harness!(u64, unchecked_shr, checked_unchecked_shr_u64);
1988+
generate_unchecked_shift_harness!(u128, unchecked_shr, checked_unchecked_shr_u128);
1989+
generate_unchecked_shift_harness!(usize, unchecked_shr, checked_unchecked_shr_usize);
1990+
1991+
// `unchecked_shl` proofs
1992+
//
1993+
// Target types:
1994+
// i{8,16,32,64,128,size} and u{8,16,32,64,128,size} -- 12 types in total
1995+
//
1996+
// Target contracts:
1997+
// #[requires(shift < Self::BITS)]
1998+
//
1999+
// Target function:
2000+
// pub const unsafe fn unchecked_shl(self, shift: u32) -> Self
2001+
//
2002+
// This function performs an unchecked bitwise left shift operation.
2003+
generate_unchecked_shift_harness!(i8, unchecked_shl, checked_unchecked_shl_i8);
2004+
generate_unchecked_shift_harness!(i16, unchecked_shl, checked_unchecked_shl_i16);
2005+
generate_unchecked_shift_harness!(i32, unchecked_shl, checked_unchecked_shl_i32);
2006+
generate_unchecked_shift_harness!(i64, unchecked_shl, checked_unchecked_shl_i64);
2007+
generate_unchecked_shift_harness!(i128, unchecked_shl, checked_unchecked_shl_i128);
2008+
generate_unchecked_shift_harness!(isize, unchecked_shl, checked_unchecked_shl_isize);
2009+
generate_unchecked_shift_harness!(u8, unchecked_shl, checked_unchecked_shl_u8);
2010+
generate_unchecked_shift_harness!(u16, unchecked_shl, checked_unchecked_shl_u16);
2011+
generate_unchecked_shift_harness!(u32, unchecked_shl, checked_unchecked_shl_u32);
2012+
generate_unchecked_shift_harness!(u64, unchecked_shl, checked_unchecked_shl_u64);
2013+
generate_unchecked_shift_harness!(u128, unchecked_shl, checked_unchecked_shl_u128);
2014+
generate_unchecked_shift_harness!(usize, unchecked_shl, checked_unchecked_shl_usize);
2015+
19532016
// `unchecked_sub` proofs
19542017
//
19552018
// Target types:

0 commit comments

Comments
 (0)