Skip to content

Commit 7dab9d8

Browse files
committed
Detect loop locals with goto_rw in DFCC
1 parent 20a1ecf commit 7dab9d8

File tree

30 files changed

+172
-83
lines changed

30 files changed

+172
-83
lines changed

regression/contracts-dfcc/dont_skip_cprover_prefixed_vars_fail/main.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
void foo()
22
{
3-
int nondet_var;
4-
int __VERIFIER_var;
5-
int __CPROVER_var;
3+
int nondet_var = nondet_int();
4+
int __VERIFIER_var = nondet_int();
5+
int __CPROVER_var = nondet_int();
66
for(int i = 10; i > 0; i--)
77
// clang-format off
8-
__CPROVER_assigns(i)
8+
__CPROVER_assigns(i)
99
__CPROVER_loop_invariant(0 <= i && i <= 10)
1010
__CPROVER_decreases(i)
1111
// clang-format on

regression/contracts-dfcc/dont_skip_cprover_prefixed_vars_pass/main.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
void foo()
22
{
3-
int nondet_var;
4-
int __VERIFIER_var;
5-
int __CPROVER_var;
3+
int nondet_var = nondet_int();
4+
int __VERIFIER_var = nondet_int();
5+
int __CPROVER_var = nondet_int();
66
for(int i = 10; i > 0; i--)
77
// clang-format off
88
__CPROVER_assigns(i,nondet_var, __VERIFIER_var, __CPROVER_var)

regression/contracts-dfcc/invar_assigns_opt/main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ int foo()
1717
}
1818
assert(r1 == 0);
1919

20-
int r2, s2 = 1;
20+
int r2 = nondet_int(), s2 = 1;
2121
__CPROVER_assume(r2 >= 0);
2222
while(r2 > 0)
2323
__CPROVER_assigns(r2, s2) __CPROVER_loop_invariant(r2 >= 0 && s2 == 1)

regression/contracts-dfcc/invar_check_break_fail/main.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
#include <assert.h>
2-
31
int main()
42
{
5-
int r;
3+
int r = nondet_int();
64
__CPROVER_assume(r >= 0);
75

86
while(r > 0)

regression/contracts-dfcc/invar_check_break_fail/test.desc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ main.c
33
--dfcc main --apply-loop-contracts
44
^EXIT=10$
55
^SIGNAL=0$
6-
^\[main.loop_invariant_base.\d+\] line 8 Check invariant before entry for loop .*: SUCCESS$
7-
^\[main.loop_invariant_step.\d+\] line 8 Check invariant after step for loop .*: SUCCESS$
8-
^\[main.loop_step_unwinding.\d+\] line 8 Check step was unwound for loop .*: SUCCESS$
6+
^\[main.loop_invariant_base.\d+\] line 6 Check invariant before entry for loop .*: SUCCESS$
7+
^\[main.loop_invariant_step.\d+\] line 6 Check invariant after step for loop .*: SUCCESS$
8+
^\[main.loop_step_unwinding.\d+\] line 6 Check step was unwound for loop .*: SUCCESS$
99
^\[main.assigns.\d+\] .* Check that r is assignable: SUCCESS$
1010
^\[main\.assertion\.\d+\] .* assertion r == 0: FAILURE$
1111
^VERIFICATION FAILED$

regression/contracts-dfcc/invar_check_break_pass/main.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
#include <assert.h>
2-
31
int main()
42
{
5-
int r;
3+
int r = nondet_int();
64
__CPROVER_assume(r >= 0);
75

86
while(r > 0)

regression/contracts-dfcc/invar_check_break_pass/test.desc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ main.c
33
--dfcc main --apply-loop-contracts
44
^EXIT=0$
55
^SIGNAL=0$
6-
^\[main.loop_invariant_base.\d+\] line 8 Check invariant before entry for loop .*: SUCCESS$
7-
^\[main.loop_invariant_step.\d+\] line 8 Check invariant after step for loop .*: SUCCESS$
8-
^\[main.loop_step_unwinding.\d+\] line 8 Check step was unwound for loop .*: SUCCESS$
9-
^\[main.loop_decreases.\d+\] line 8 Check variant decreases after step for loop .*: SUCCESS$
6+
^\[main.loop_invariant_base.\d+\] line 6 Check invariant before entry for loop .*: SUCCESS$
7+
^\[main.loop_invariant_step.\d+\] line 6 Check invariant after step for loop .*: SUCCESS$
8+
^\[main.loop_step_unwinding.\d+\] line 6 Check step was unwound for loop .*: SUCCESS$
9+
^\[main.loop_decreases.\d+\] line 6 Check variant decreases after step for loop .*: SUCCESS$
1010
^\[main.assigns.\d+\] .* Check that r is assignable: SUCCESS$
1111
^\[main\.assertion\.\d+\] .* assertion r == 0 || r == 1: SUCCESS$
1212
^VERIFICATION SUCCESSFUL$

regression/contracts-dfcc/invar_check_continue/main.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
#include <assert.h>
2-
31
int main()
42
{
5-
int r;
3+
int r = nondet_int();
64
__CPROVER_assume(r >= 0);
75

86
while(r > 0)

regression/contracts-dfcc/invar_check_continue/test.desc

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ main.c
33
--dfcc main --apply-loop-contracts
44
^EXIT=0$
55
^SIGNAL=0$
6-
^\[main.loop_assigns.\d+\] line 8 Check assigns clause inclusion for loop .*: SUCCESS$
7-
^\[main.loop_invariant_base.\d+\] line 8 Check invariant before entry for loop .*: SUCCESS$
8-
^\[main.loop_invariant_step.\d+\] line 8 Check invariant after step for loop .*: SUCCESS$
9-
^\[main.loop_step_unwinding.\d+\] line 8 Check step was unwound for loop .*: SUCCESS$
10-
^\[main.loop_decreases.\d+\] line 8 Check variant decreases after step for loop .*: SUCCESS$
6+
^\[main.loop_assigns.\d+\] line 6 Check assigns clause inclusion for loop .*: SUCCESS$
7+
^\[main.loop_invariant_base.\d+\] line 6 Check invariant before entry for loop .*: SUCCESS$
8+
^\[main.loop_invariant_step.\d+\] line 6 Check invariant after step for loop .*: SUCCESS$
9+
^\[main.loop_step_unwinding.\d+\] line 6 Check step was unwound for loop .*: SUCCESS$
10+
^\[main.loop_decreases.\d+\] line 6 Check variant decreases after step for loop .*: SUCCESS$
1111
^\[main.assigns.\d+\] .* Check that r is assignable: SUCCESS$
1212
^\[main\.assertion\.\d+\] .* assertion r == 0: SUCCESS$
1313
^VERIFICATION SUCCESSFUL$

regression/contracts-dfcc/invar_check_multiple_loops/main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
int main()
44
{
5-
int r, n, x, y;
5+
int r, n, x = nondet_int(), y = nondet_int();
66
__CPROVER_assume(n > 0 && x == y);
77

88
for(r = 0; r < n; ++r)

0 commit comments

Comments
 (0)