Skip to content

Behavior of infinite loops with goto-instrument --unwind N --unwinding-assertions differs from cbmc --unwind N --unwinding-assertions #6433

Closed
@gsingh93

Description

@gsingh93

CBMC version: 5.42.0 (cbmc-5.42.0-2-g038a53b50)
Operating system: Debian
Exact command line resulting in the issue: goto-instrument --unwind 3 --unwinding-assertions test.gb test-unwinding.gb && cbmc test-unwinding.gb --function foo
What behaviour did you expect: No assertion failures
What happened instead: Two assertion failure

I have the following code in test.c:

int foo() {
  while (1) {
  }
  __CPROVER_assert(0, "reachable");
}

When I run cbmc --unwind 3 --unwinding-assertions test.c --function foo, I don't see any assertion failures:

[foo.assertion.1] line 4 reachable: SUCCESS

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

Now I try to do the same thing with goto-instrument:

goto-cc test.c -o test.gb
goto-instrument --unwind 3 --unwinding-assertions test.gb test-unwinding.gb
cbmc test-unwinding.gb --function foo

And I see two failures:

[foo.1] line 2 assertion: FAILURE
[foo.assertion.1] line 4 reachable: FAILURE

** 2 of 2 failed (2 iterations)
VERIFICATION FAILED

The behavior I want is actually what cbmc does, which is to essentially treat the loop as assume(false). Why does goto-instrument behave differently, and is it intended to behave differently?

Metadata

Metadata

Assignees

Labels

awsBugs or features of importance to AWS CBMC userspending merge

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions