Skip to content

Commit 5a15096

Browse files
committed
fixed some harnesses
1 parent 46b96af commit 5a15096

1 file changed

Lines changed: 9 additions & 1 deletion

File tree

  • library/core/src/intrinsics

library/core/src/intrinsics/mod.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4327,6 +4327,12 @@ mod verify {
43274327
transmute_unchecked_should_fail!(transmute_unchecked_i32_to_char, i32, char);
43284328
transmute_unchecked_should_fail!(transmute_unchecked_u32_to_char, u32, char);
43294329
transmute_unchecked_should_fail!(transmute_unchecked_f32_to_char, f32, char);
4330+
//transmute to type with potentially invalid bit patterns, but filtering out invalid inputs
4331+
transmute_unchecked_should_succeed!(transmute_unchecked_valid_i8_to_bool, i8, bool);
4332+
transmute_unchecked_should_succeed!(transmute_unchecked_valid_u8_to_bool, u8, bool);
4333+
transmute_unchecked_should_succeed!(transmute_unchecked_valid_i32_to_char, i32, char);
4334+
transmute_unchecked_should_succeed!(transmute_unchecked_valid_u32_to_char, u32, char);
4335+
transmute_unchecked_should_succeed!(transmute_unchecked_valid_f32_to_char, f32, char);
43304336

43314337
//Note: the following harness fails when it in theory should not
43324338
//The problem is that ub_checks::can_dereference(), used in a validity precondition
@@ -4374,9 +4380,10 @@ mod verify {
43744380
//we then assert that the resulting value is equal to the initial value
43754381
macro_rules! transmute_unchecked_two_ways {
43764382
($harness:ident, $src:ty, $dst:ty) => {
4377-
#[kani::proof_for_contract(transmute_unchecked_wrapper)]
4383+
#[kani::proof]
43784384
fn $harness() {
43794385
let src: $src = kani::any();
4386+
kani::assume(ub_checks::can_dereference(&src as *const $src as *const $dst));
43804387
let dst: $dst = unsafe { transmute_unchecked_wrapper(src) };
43814388
let src2: $src = unsafe { *(&dst as *const $dst as *const $src) };
43824389
assert_eq!(src, src2);
@@ -4392,6 +4399,7 @@ mod verify {
43924399
#[kani::proof]
43934400
fn $harness() {
43944401
let src: $src = kani::any();
4402+
kani::assume(ub_checks::can_dereference(&src as *const $src as *const $dst));
43954403
let dst: $dst = unsafe { transmute_unchecked_wrapper(src) };
43964404
let src2: $src = unsafe { *(&dst as *const $dst as *const $src) };
43974405
if src.is_nan() {

0 commit comments

Comments
 (0)