Closed
Description
I tried this code:
//! swap.rs
#[kani::proof]
pub fn check_swap_unit() {
let mut x: () = kani::any();
let mut y: () = kani::any();
std::mem::swap(&mut x, &mut y)
}
using the following command line invocation:
kani swap.rs
with Kani version: 0.51.0
I expected to see this happen: Verification succeeded
Instead, this happened: Verification failed
SUMMARY:
** 18 of 21 failed
Failed Checks: dereference failure: pointer NULL
Failed Checks: dereference failure: pointer invalid
Failed Checks: dereference failure: deallocated dynamic object
Failed Checks: dereference failure: dead object
Failed Checks: dereference failure: pointer outside object bounds
Failed Checks: dereference failure: invalid integer address
Failed Checks: dereference failure: pointer NULL
File: "/home/ANT.AMAZON.COM/celinval/.rustup/toolchains/nightly-2024-04-21-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/mem/mod.rs", line 731, in std::mem::swap::<()>
Failed Checks: dereference failure: pointer invalid
File: "/home/ANT.AMAZON.COM/celinval/.rustup/toolchains/nightly-2024-04-21-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/mem/mod.rs", line 731, in std::mem::swap::<()>
Failed Checks: dereference failure: deallocated dynamic object
File: "/home/ANT.AMAZON.COM/celinval/.rustup/toolchains/nightly-2024-04-21-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/mem/mod.rs", line 731, in std::mem::swap::<()>
Failed Checks: dereference failure: dead object
File: "/home/ANT.AMAZON.COM/celinval/.rustup/toolchains/nightly-2024-04-21-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/mem/mod.rs", line 731, in std::mem::swap::<()>
Failed Checks: dereference failure: pointer outside object bounds
File: "/home/ANT.AMAZON.COM/celinval/.rustup/toolchains/nightly-2024-04-21-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/mem/mod.rs", line 731, in std::mem::swap::<()>
Failed Checks: dereference failure: invalid integer address
File: "/home/ANT.AMAZON.COM/celinval/.rustup/toolchains/nightly-2024-04-21-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/mem/mod.rs", line 731, in std::mem::swap::<()>
Failed Checks: dereference failure: pointer NULL
File: "/home/ANT.AMAZON.COM/celinval/.rustup/toolchains/nightly-2024-04-21-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/mem/mod.rs", line 731, in std::mem::swap::<()>
Failed Checks: dereference failure: pointer invalid
File: "/home/ANT.AMAZON.COM/celinval/.rustup/toolchains/nightly-2024-04-21-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/mem/mod.rs", line 731, in std::mem::swap::<()>
Failed Checks: dereference failure: deallocated dynamic object
File: "/home/ANT.AMAZON.COM/celinval/.rustup/toolchains/nightly-2024-04-21-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/mem/mod.rs", line 731, in std::mem::swap::<()>
Failed Checks: dereference failure: dead object
File: "/home/ANT.AMAZON.COM/celinval/.rustup/toolchains/nightly-2024-04-21-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/mem/mod.rs", line 731, in std::mem::swap::<()>
Failed Checks: dereference failure: pointer outside object bounds
File: "/home/ANT.AMAZON.COM/celinval/.rustup/toolchains/nightly-2024-04-21-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/mem/mod.rs", line 731, in std::mem::swap::<()>
Failed Checks: dereference failure: invalid integer address
File: "/home/ANT.AMAZON.COM/celinval/.rustup/toolchains/nightly-2024-04-21-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/mem/mod.rs", line 731, in std::mem::swap::<()>
I believe this is a regression introduced by #3134. I believe the correct fix is to modify this intrinsic to become a no-op for ZST.