Skip to content

Intrinsic type_swapped fails for unit types #3182

Closed
@celinval

Description

@celinval

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    [C] BugThis is a bug. Something isn't working.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions