Skip to content

Prusti crash bug related to dereference operations #1531

@stoneman258

Description

@stoneman258

While analyzing my Rust project with Prusti, the tool panicked with the error "internal error: entered unreachable code" when performing dereference operations inside a loop. The input program is provided below, and I used the command cargo prusti.

Code Example

fn main() {
    'outer_while: while true {
        let mut counter = Box::new(0);
        while *counter < 5 {
            *counter += 1;
            if *counter == 3 {
                break 'outer_while;
            }
        }
    }
}

Error Stacktrace

thread 'rustc' panicked at prusti-viper/src/encoder/procedure_encoder.rs:5382:42:
internal error: entered unreachable code: Adt(std::boxed::Box, [i32, Adt(std::alloc::Global, [])])
stack backtrace:
  18:     0x55e3e2f7b4c4 - prusti_viper::encoder::procedure_encoder::ProcedureEncoder::encode_loop_invariant_permissions::h52a27851aed20c5d
  19:     0x55e3e2f8124e - prusti_viper::encoder::procedure_encoder::ProcedureEncoder::encode_loop_invariant_exhale_stmts::h2832c3abd2156764
  20:     0x55e3e2f21f94 - prusti_viper::encoder::procedure_encoder::ProcedureEncoder::encode_loop::hec9439079eeae71e
  21:     0x55e3e2f1e081 - prusti_viper::encoder::procedure_encoder::ProcedureEncoder::encode_blocks_group::h04afc5fa1fcae9bc
  22:     0x55e3e2f23580 - prusti_viper::encoder::procedure_encoder::ProcedureEncoder::encode_loop::hec9439079eeae71e
  23:     0x55e3e2f1e081 - prusti_viper::encoder::procedure_encoder::ProcedureEncoder::encode_blocks_group::h04afc5fa1fcae9bc
  24:     0x55e3e2f1a0b3 - prusti_viper::encoder::procedure_encoder::ProcedureEncoder::encode::hf06146a42e8f626d
  25:     0x55e3e2e22f34 - prusti_viper::encoder::encoder::Encoder::encode_procedure::h0682b71d927d722d
  26:     0x55e3e2e28c87 - prusti_viper::encoder::encoder::Encoder::process_encoding_queue::h7f215cb28c05bc29
  27:     0x55e3e281ae53 - prusti_viper::verifier::Verifier::verify::hb6a7d88218505da5
......

Environment

Prusti version: 0.2.2, commit 0d4a8d4 2024-03-26 13:08:03 UTC

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions