Open
Description
I tried this code:
// indirect.rs
extern crate kani;
use std::convert::TryFrom;
/// Constrain `val` to be a valid character.
#[kani::requires(u32::from(_char) == val)]
#[kani::ensures(|res| *res == _char)]
pub fn indirect_assumption(val: u32, _char: char) -> char {
char::try_from(val).unwrap()
}
mod verify {
use super::*;
use kani::Arbitrary;
#[kani::proof_for_contract(indirect_assumption)]
fn check_indirect_contract() {
indirect_assumption(kani::any(), kani::any());
}
/// This harness that encodes the pre-condition using`kani::assume` succeeds
#[kani::proof]
fn check_indirect() {
let val = kani::any();
let c = kani::any();
kani::assume(u32::from(c) == val);
indirect_assumption(val, c);
}
}
using the following command line invocation:
kani indirect.rs -Z function-contracts
with Kani version: 0.53.0-dev
I expected to see this happen: Verification should succeed
Instead, this happened: Verification failed.
Failed Checks: This is a placeholder message; Kani doesn't support message formatted at runtime
File: "/home/ubuntu/.rustup/toolchains/nightly-2024-07-18-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/result.rs", line 1679, in std::result::unwrap_failed