Skip to content

Memory blows up on a small program involving String split #2302

@zhassan-aws

Description

@zhassan-aws

I tried this code:

#[kani::proof]
#[kani::unwind(4)]
#[kani::solver(cadical)]
fn main() {
    let mut s = String::with_capacity(3);
    //let c1 = 'a';
    let c1: char = kani::any();
    kani::assume(c1 == 'a');
    s.push(c1);
    s.push('.');
    let c2 = 'b';
    s.push(c2);
    let v: Vec<&str> = s.split('.').collect();
    assert_eq!(v.len(), 2);
    assert_eq!(v[0], "a");
    assert_eq!(v[1], "b");
}

using the following command line invocation:

kani test.rs

with Kani version: 048b598

The version that uses let c1 = 'a'; verifies in ~1 second, but for the version the uses:

    let c1: char = kani::any();
    kani::assume(c1 == 'a');

memory consumption reaches 30 GB.

Metadata

Metadata

Assignees

Labels

T-CBMCIssue related to an existing CBMC issue[C] BugThis is a bug. Something isn't working.[E] PerformanceTrack performance improvement (Time / Memory / CPU)

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions