Requested feature: Allow Kani to hand the goto binary it already produces to
ESBMC instead of CBMC, behind the unstable option -Z esbmc.
Use case: User can use another verification backend that can be used to confirm the results. Secondarily, ESBMC has a different symbolic execution engine, memory model and SMT encoding, so harnesses that one tool cannot finish may be tractable for the other.
Link to relevant documentation (Rust reference, Nomicon, RFC):
Test case:
// kani main_true.rs -Z esbmc => VERIFICATION:- SUCCESSFUL
#[kani::proof]
fn main() {
let a: u8 = kani::any();
kani::assume(a < 100);
assert!(a as u16 + 1 > a as u16);
}
// kani main_false.rs -Z esbmc => VERIFICATION:- FAILED
#[kani::proof]
fn main() {
let a: u8 = kani::any();
let b: u8 = kani::any();
assert!(a >= b);
}
Requested feature: Allow Kani to hand the goto binary it already produces to
ESBMC instead of CBMC, behind the unstable option
-Z esbmc.Use case: User can use another verification backend that can be used to confirm the results. Secondarily, ESBMC has a different symbolic execution engine, memory model and SMT encoding, so harnesses that one tool cannot finish may be tractable for the other.
Link to relevant documentation (Rust reference, Nomicon, RFC):
Test case: