Closed
Description
I tried this code:
#![feature(core_intrinsics)]
use std::intrinsics::ctpop;
// These shouldn't compile.
#[kani::proof]
pub fn check_zst_ctpop() {
let n = ctpop(());
assert!(n == ());
}
and also this code:
#![feature(core_intrinsics)]
use std::intrinsics::sub_with_overflow;
#[kani::proof]
pub fn check_zst_sub_with_overflow() {
let n = sub_with_overflow((), ());
assert!(!n.1);
}
using the following command line invocation:
kani ice.rs
with Kani version:
I expected to see this happen: Kani should fail with a compilation error similar to running rustc ice.rs
Instead, this happened: Kani crashes.
thread '<unnamed>' panicked at 'BinaryOperation Expression does not typecheck OverflowResultMinus Expr { value: Symbol { identifier: "arithmetic_zst_fixme::check_zst_sub_with_overflow::1::var_2" }, typ: StructTag("tag-Unit"), loc
ation: None } Expr { value: Symbol { identifier: "arithmetic_zst_fixme::check_zst_sub_with_overflow::1::var_3" }, typ: StructTag("tag-Unit"), location: None }', cprover_bindings/src/goto_program/expr.rs:1000:9
stack backtrace:
0: rust_begin_unwind
at /rustc/c5d82ed7a4ad94a538bb87e5016e7d5ce0bd434b/library/std/src/panicking.rs:575:5
1: core::panicking::panic_fmt
at /rustc/c5d82ed7a4ad94a538bb87e5016e7d5ce0bd434b/library/core/src/panicking.rs:65:14
2: cprover_bindings::goto_program::expr::Expr::binop
at /kani/cprover_bindings/src/goto_program/expr.rs:1000:9
3: cprover_bindings::goto_program::expr::Expr::sub_overflow_result
at /kani/cprover_bindings/src/goto_program/expr.rs:1468:9
4: kani_compiler::codegen_cprover_gotoc::codegen::intrinsic::<impl kani_compiler::codegen_cprover_gotoc::context::goto_ctx::GotocCtx>::codegen_intrinsic
at /kani/kani-compiler/src/codegen_cprover_gotoc/codegen/intrinsic.rs:631:36
5: kani_compiler::codegen_cprover_gotoc::codegen::intrinsic::<impl kani_compiler::codegen_cprover_gotoc::context::goto_ctx::GotocCtx>::codegen_funcall_of_intrinsic
at /kani/kani-compiler/src/codegen_cprover_gotoc/codegen/intrinsic.rs:74:21
6: kani_compiler::codegen_cprover_gotoc::codegen::statement::<impl kani_compiler::codegen_cprover_gotoc::context::goto_ctx::GotocCtx>::codegen_funcall
at /kani/kani-compiler/src/codegen_cprover_gotoc/codegen/statement.rs:513:20
7: kani_compiler::codegen_cprover_gotoc::codegen::statement::<impl kani_compiler::codegen_cprover_gotoc::context::goto_ctx::GotocCtx>::codegen_terminator
at /kani/kani-compiler/src/codegen_cprover_gotoc/codegen/statement.rs:209:17
8: kani_compiler::codegen_cprover_gotoc::codegen::block::<impl kani_compiler::codegen_cprover_gotoc::context::goto_ctx::GotocCtx>::codegen_block
at /kani/kani-compiler/src/codegen_cprover_gotoc/codegen/block.rs:22:29
9: kani_compiler::codegen_cprover_gotoc::codegen::function::<impl kani_compiler::codegen_cprover_gotoc::context::goto_ctx::GotocCtx>::codegen_function::{{closure}}
at /kani/kani-compiler/src/codegen_cprover_gotoc/codegen/function.rs:90:69
10: core::iter::traits::iterator::Iterator::for_each::call::{{closure}}
at /rustc/c5d82ed7a4ad94a538bb87e5016e7d5ce0bd434b/library/core/src/iter/traits/iterator.rs:828:29
11: core::iter::adapters::map::map_fold::{{closure}}
at /rustc/c5d82ed7a4ad94a538bb87e5016e7d5ce0bd434b/library/core/src/iter/adapters/map.rs:84:21
12: <core::iter::adapters::enumerate::Enumerate<I> as core::iter::traits::iterator::Iterator>::fold::enumerate::{{closure}}
at /rustc/c5d82ed7a4ad94a538bb87e5016e7d5ce0bd434b/library/core/src/iter/adapters/enumerate.rs:106:27
13: core::iter::traits::iterator::Iterator::fold
at /rustc/c5d82ed7a4ad94a538bb87e5016e7d5ce0bd434b/library/core/src/iter/traits/iterator.rs:2414:21
14: <core::iter::adapters::enumerate::Enumerate<I> as core::iter::traits::iterator::Iterator>::fold
at /rustc/c5d82ed7a4ad94a538bb87e5016e7d5ce0bd434b/library/core/src/iter/adapters/enumerate.rs:112:9
15: <core::iter::adapters::map::Map<I,F> as core::iter::traits::iterator::Iterator>::fold
at /rustc/c5d82ed7a4ad94a538bb87e5016e7d5ce0bd434b/library/core/src/iter/adapters/map.rs:124:9
16: core::iter::traits::iterator::Iterator::for_each
at /rustc/c5d82ed7a4ad94a538bb87e5016e7d5ce0bd434b/library/core/src/iter/traits/iterator.rs:831:9
17: kani_compiler::codegen_cprover_gotoc::codegen::function::<impl kani_compiler::codegen_cprover_gotoc::context::goto_ctx::GotocCtx>::codegen_function
at /kani/kani-compiler/src/codegen_cprover_gotoc/codegen/function.rs:90:13
18: <kani_compiler::codegen_cprover_gotoc::compiler_interface::GotocCodegenBackend as rustc_codegen_ssa::traits::backend::CodegenBackend>::codegen_crate::{{closure}}::{{closure}}
at /kani/kani-compiler/src/codegen_cprover_gotoc/compiler_interface.rs:130:39
19: kani_compiler::codegen_cprover_gotoc::utils::debug::<impl kani_compiler::codegen_cprover_gotoc::context::goto_ctx::GotocCtx>::call_with_panic_debug_info::{{closure}}
at /kani/kani-compiler/src/codegen_cprover_gotoc/utils/debug.rs:68:13
20: std::thread::local::LocalKey<T>::try_with
at /rustc/c5d82ed7a4ad94a538bb87e5016e7d5ce0bd434b/library/std/src/thread/local.rs:446:16
21: std::thread::local::LocalKey<T>::with
at /rustc/c5d82ed7a4ad94a538bb87e5016e7d5ce0bd434b/library/std/src/thread/local.rs:422:9
22: kani_compiler::codegen_cprover_gotoc::utils::debug::<impl kani_compiler::codegen_cprover_gotoc::context::goto_ctx::GotocCtx>::call_with_panic_debug_info
at /kani/kani-compiler/src/codegen_cprover_gotoc/utils/debug.rs:65:9
23: <kani_compiler::codegen_cprover_gotoc::compiler_interface::GotocCodegenBackend as rustc_codegen_ssa::traits::backend::CodegenBackend>::codegen_crate::{{closure}}
at /kani/kani-compiler/src/codegen_cprover_gotoc/compiler_interface.rs:129:29
24: kani_compiler::codegen_cprover_gotoc::compiler_interface::with_timer
at /kani/kani-compiler/src/codegen_cprover_gotoc/compiler_interface.rs:518:15
25: <kani_compiler::codegen_cprover_gotoc::compiler_interface::GotocCodegenBackend as rustc_codegen_ssa::traits::backend::CodegenBackend>::codegen_crate
at /kani/kani-compiler/src/codegen_cprover_gotoc/compiler_interface.rs:99:9
26: <rustc_session::session::Session>::time::<alloc::boxed::Box<dyn core::any::Any>, rustc_interface::passes::start_codegen::{closure#0}>
27: rustc_interface::passes::start_codegen
28: <rustc_interface::passes::QueryContext>::enter::<<rustc_interface::queries::Queries>::ongoing_codegen::{closure#0}::{closure#0}, core::result::Result<alloc::boxed::Box<dyn core::any::Any>, rustc_errors::ErrorGuaranteed>>
29: <rustc_interface::queries::Queries>::ongoing_codegen
30: <rustc_interface::interface::Compiler>::enter::<rustc_driver::run_compiler::{closure#1}::{closure#2}, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_errors::ErrorGuaranteed>>
31: rustc_span::with_source_map::<core::result::Result<(), rustc_errors::ErrorGuaranteed>, rustc_interface::interface::run_compiler<core::result::Result<(), rustc_errors::ErrorGuaranteed>, rustc_driver::run_compiler::{closure#1
}>::{closure#0}::{closure#1}>
Activity