Skip to content

__CPROVER_assume doesn't work as expected with large constant #6890

Open
@HclX

Description

@HclX

CBMC version: CBMC version 5.56.0 (cbmc-5.56.0) 64-bit x86_64 linux
Operating system: Linux
Exact command line resulting in the issue: cbmc test.c --function cbmc_entry
What behaviour did you expect: with the following test code, I'm expecting the first assertion succeeds and the second one fails

#include <stdint.h>
#include <stddef.h>
#include <assert.h>

void cbmc_entry() {
    size_t x0 = nondet_size_t();
    size_t x1;

    __CPROVER_assume(x0 == 0x82002060);

    if (x0 == 0x82002060) {
        x1 = 1000;
    } else {
        x1 = 1001;
    }
    assert(x1 == 1000);
    assert(x1 == 1001);
}

What happened instead: both assertions are tested success

** Results:
test.c function cbmc_entry
[cbmc_entry.assertion.1] line 16 assertion x1 == 1000: SUCCESS
[cbmc_entry.assertion.2] line 17 assertion x1 == 1001: SUCCESS

** 0 of 2 failed (1 iterations)
VERIFICATION SUCCESSFUL

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions