You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Contracts & Harnesses for wrapping_shr (rust-lang#123)
Towards model-checking#59
Changes
Added contracts for wrapping_shr (located in
library/core/src/num/int_macros.rs and uint_macros.rs)
Added harnesses for wrapping_shr of each integer type
i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize --- 12
harnesses in total.
Revalidation
Per the discussion in
model-checking#59, we have to
build and run Kani from feature/verify-rust-std branch.
To revalidate the verification results, run the following command.
<harness_to_run> can be either num::verify to run all harnesses or
num::verify::<harness_name> (e.g. checked_wrapping_shl_i8) to run a
specific harness.
```
kani verify-std "path/to/library" \
--harness <harness_to_run> \
-Z unstable-options \
-Z function-contracts \
-Z mem-predicates
```
All harnesses should pass the default checks (1251 checks where 1
unreachable).
```
SUMMARY:
** 0 of 161 failed (1 unreachable)
VERIFICATION:- SUCCESSFUL
Verification Time: 0.32086188s
Complete - 12 successfully verified harnesses, 0 failures, 12 total.
```
Example of the unreachable check:
```
Check 9: num::<impl i8>::wrapping_shr.assertion.1
- Status: UNREACHABLE
- Description: "attempt to subtract with overflow"
- Location: library/core/src/num/int_macros.rs:2199:42 in function num::<impl i8>::wrapping_shr
```
---------
Co-authored-by: Yenyun035 <[email protected]>
0 commit comments