File tree 39 files changed +148
-44
lines changed
assigns_validity_pointer_02
contracts_with_function_pointers
embedded_contract_fail_01
embedded_contract_fail_02
function-pointer-contracts-replace
history-pointer-enforce-09
history-pointer-enforce-10
history-pointer-replace-01
history-pointer-replace-02
history-pointer-replace-04
quantifiers-exists-both-enforce
quantifiers-exists-both-replace
quantifiers-exists-requires-enforce
quantifiers-exists-requires-replace
quantifiers-forall-both-enforce
quantifiers-forall-both-replace
quantifiers-forall-ensures-enforce
quantifiers-forall-requires-enforce
quantifiers-forall-requires-replace
test_aliasing_ensure_indirect
test_array_memory_enforce
test_array_memory_replace
test_array_memory_too_small_replace
test_possibly_aliased_arguments
test_scalar_memory_enforce
test_scalar_memory_replace
test_struct_member_enforce
variant_multidimensional_ackermann
goto-instrument/contracts
39 files changed +148
-44
lines changed Original file line number Diff line number Diff line change 1
1
CORE
2
2
main.c
3
3
--enforce-contract foo
4
- ^Ignored duplicate expression '\*x' in assigns clause spec at file main.c line \d+$
4
+ ^Ignored duplicate expression '\*x' in assigns clause spec at file main.c line \d+ function .* $
5
5
^EXIT=0$
6
6
^SIGNAL=0$
7
7
^VERIFICATION SUCCESSFUL$
Original file line number Diff line number Diff line change 3
3
--enforce-contract foo
4
4
^EXIT=0$
5
5
^SIGNAL=0$
6
- ^\[postcondition.\d+\] file main.c line \d+ Check ensures clause: SUCCESS$
6
+ ^\[foo. postcondition.\d+\] line \d+ Check ensures clause: SUCCESS$
7
7
^\[bar.assigns.\d+\] line \d+ Check that \*x is assignable: SUCCESS$
8
8
^\[bar.assigns.\d+\] line \d+ Check that \*y is assignable: SUCCESS$
9
9
^\[baz.assigns.\d+\] line \d+ Check that \*z is assignable: SUCCESS$
Original file line number Diff line number Diff line change 3
3
--enforce-contract bar
4
4
^EXIT=0$
5
5
^SIGNAL=0$
6
- ^\[postcondition.\d+\] file main.c line \d+ Check ensures clause: SUCCESS$
6
+ ^\[bar. postcondition.\d+\] line \d+ Check ensures clause: SUCCESS$
7
7
^\[bar.assigns.\d+\] line \d+ Check that \*return\_value\_baz is assignable: SUCCESS$
8
8
^\[foo.assigns.\d+\] line \d+ Check that \*y is assignable: SUCCESS$
9
9
^VERIFICATION SUCCESSFUL$
Original file line number Diff line number Diff line change
1
+ typedef void (* fun_ptr_t )(int x );
2
+
3
+ void bar (int x )
4
+ {
5
+ return ;
6
+ }
7
+
8
+ void foo (void (* fun_ptr )(int x ) __CPROVER_requires (x != 0 ))
9
+ {
10
+ return ;
11
+ }
12
+
13
+ void main ()
14
+ {
15
+ fun_ptr_t fun_ptr = bar ;
16
+ foo (fun_ptr );
17
+ return ;
18
+ }
Original file line number Diff line number Diff line change
1
+ CORE
2
+ main.c
3
+
4
+ ^.*: Function contracts allowed only at top-level declarations. .*$
5
+ ^PARSING ERROR$
6
+ ^EXIT=(1|64)$
7
+ ^SIGNAL=0$
8
+ --
9
+ --
10
+ Checks if function contracts can be attached to function pointers
11
+ (with non-empty parameter lists) in function parameters. This should
12
+ fail. Exit code 64 for Windows servers.
Original file line number Diff line number Diff line change
1
+ typedef int (* fun_ptr_t )();
2
+
3
+ int bar ()
4
+ {
5
+ return 1 ;
6
+ }
7
+
8
+ void foo (int (* fun_ptr )() __CPROVER_ensures (__CPROVER_return_value == 1 ))
9
+ {
10
+ return ;
11
+ }
12
+
13
+ void main ()
14
+ {
15
+ fun_ptr_t fun_ptr = bar ;
16
+ foo (fun_ptr );
17
+ return ;
18
+ }
Original file line number Diff line number Diff line change
1
+ CORE
2
+ main.c
3
+
4
+ ^.*: Function contracts allowed only at top-level declarations. .*$
5
+ ^PARSING ERROR$
6
+ ^EXIT=(1|64)$
7
+ ^SIGNAL=0$
8
+ --
9
+ --
10
+ Checks if function contracts can be attached to function pointers
11
+ (with empty parameter lists) in function parameters. This should
12
+ fail. Exit code 64 for Windows servers.
Original file line number Diff line number Diff line change 3
3
--enforce-contract foo
4
4
^EXIT=0$
5
5
^SIGNAL=0$
6
- \[postcondition.\d+\] file main.c line \d+ Check ensures clause: SUCCESS
6
+ \[foo. postcondition.\d+\] line \d+ Check ensures clause: SUCCESS
7
7
\[main.assertion.\d+\] line \d+ assertion foo\(\&x, \&y\) \=\= 10: SUCCESS
8
8
^VERIFICATION SUCCESSFUL$
9
9
--
Original file line number Diff line number Diff line change 1
1
CORE
2
2
main.c
3
3
--replace-call-with-contract foo
4
- ^\[precondition.\d+] file main.c line 19 Assert function pointer 'infun' obeys contract 'contract': SUCCESS$
4
+ ^\[foo. precondition.\d+] line 19 Assert function pointer 'infun' obeys contract 'contract': SUCCESS$
5
5
^\[main.assertion.\d+].* assertion outfun1 == contract: SUCCESS$
6
6
^\[main.assertion.\d+].* assertion outfun2 == contract: SUCCESS$
7
7
^EXIT=0$
Original file line number Diff line number Diff line change 3
3
--enforce-contract foo
4
4
^EXIT=0$
5
5
^SIGNAL=0$
6
- ^\[postcondition.\d+\] file main.c line \d+ Check ensures clause: SUCCESS$
6
+ ^\[foo. postcondition.\d+\] line \d+ Check ensures clause: SUCCESS$
7
7
^\[foo.assigns.\d+\] line \d+ Check that p->y is assignable: SUCCESS$
8
8
^VERIFICATION SUCCESSFUL$
9
9
--
Original file line number Diff line number Diff line change 3
3
--enforce-contract foo --enforce-contract bar --enforce-contract baz
4
4
^EXIT=0$
5
5
^SIGNAL=0$
6
- ^\[postcondition.\d+\] file main.c line \d+ Check ensures clause: SUCCESS$
7
- ^\[postcondition.\d+\] file main.c line \d+ Check ensures clause: SUCCESS$
8
- ^\[postcondition.\d+\] file main.c line \d+ Check ensures clause: SUCCESS$
6
+ ^\[bar. postcondition.\d+\] line \d+ Check ensures clause: SUCCESS$
7
+ ^\[baz. postcondition.\d+\] line \d+ Check ensures clause: SUCCESS$
8
+ ^\[foo. postcondition.\d+\] line \d+ Check ensures clause: SUCCESS$
9
9
^\[bar.assigns.\d+\] line \d+ Check that p->y is assignable: SUCCESS$
10
10
^\[foo.assigns.\d+\] line \d+ Check that \*p->y is assignable: SUCCESS$
11
11
^\[foo.assigns.\d+\] line \d+ Check that z is assignable: SUCCESS$
Original file line number Diff line number Diff line change 5
5
^SIGNAL=0$
6
6
^VERIFICATION SUCCESSFUL$
7
7
ASSERT \*\(address_of.*n.*\) > 0
8
- ASSUME \*\(address_of.*n.*\) = tmp_cc[\$\d]? \+ 2
8
+ ASSUME \*\(address_of.*n.*\) = .* tmp_cc[\$\d]? \+ 2
9
9
--
10
10
--
11
11
Verification:
Original file line number Diff line number Diff line change 5
5
^SIGNAL=0$
6
6
^VERIFICATION SUCCESSFUL$
7
7
ASSERT \*\(address_of.*n.*\) = 0
8
- ASSUME \*\(address_of.*n.*\) ≥ tmp_cc[\$\d]? \+ 2
8
+ ASSUME \*\(address_of.*n.*\) ≥ .* tmp_cc[\$\d]? \+ 2
9
9
--
10
10
--
11
11
Verification:
Original file line number Diff line number Diff line change 3
3
--replace-call-with-contract foo
4
4
^EXIT=10$
5
5
^SIGNAL=0$
6
- ^\[precondition.\d+\] file main.c line \d+ Check requires clause: SUCCESS$
6
+ ^\[foo. precondition.\d+\] line \d+ Check requires clause: SUCCESS$
7
7
^\[main.assertion.\d+\] line \d+ assertion p->y \!\= 7: FAILURE$
8
8
^VERIFICATION FAILED$
9
9
--
Original file line number Diff line number Diff line change 3
3
--enforce-contract f1
4
4
^EXIT=0$
5
5
^SIGNAL=0$
6
- ^\[postcondition.\d+\] file main.c line \d+ Check ensures clause: SUCCESS$
6
+ ^\[f1. postcondition.\d+\] line \d+ Check ensures clause: SUCCESS$
7
7
^VERIFICATION SUCCESSFUL$
8
8
--
9
9
^warning: ignoring
Original file line number Diff line number Diff line change 3
3
--replace-call-with-contract f1
4
4
^EXIT=0$
5
5
^SIGNAL=0$
6
- ^\[precondition.\d+\] file main.c line \d+ Check requires clause: SUCCESS$
6
+ ^\[f1. precondition.\d+\] line \d+ Check requires clause: SUCCESS$
7
7
^VERIFICATION SUCCESSFUL$
8
8
--
9
9
^warning: ignoring
Original file line number Diff line number Diff line change 3
3
--enforce-contract f1
4
4
^EXIT=0$
5
5
^SIGNAL=0$
6
- ^\[postcondition.\d+\] file main.c line \d+ Check ensures clause: SUCCESS$
6
+ ^\[f1. postcondition.\d+\] line \d+ Check ensures clause: SUCCESS$
7
7
^VERIFICATION SUCCESSFUL$
8
8
--
9
9
^warning: ignoring
Original file line number Diff line number Diff line change 3
3
--replace-call-with-contract f1 --replace-call-with-contract f2
4
4
^EXIT=10$
5
5
^SIGNAL=0$
6
- ^\[precondition.\d+\] file main.c line \d+ Check requires clause: SUCCESS$
7
- ^\[precondition.\d+\] file main.c line \d+ Check requires clause: FAILURE$
6
+ ^\[f1. precondition.\d+\] line \d+ Check requires clause: SUCCESS$
7
+ ^\[f2. precondition.\d+\] line \d+ Check requires clause: FAILURE$
8
8
^VERIFICATION FAILED$
9
9
--
10
10
^warning: ignoring
Original file line number Diff line number Diff line change 3
3
--enforce-contract f1
4
4
^EXIT=0$
5
5
^SIGNAL=0$
6
- ^\[postcondition.\d+\] file main.c line \d+ Check ensures clause: SUCCESS$
6
+ ^\[f1. postcondition.\d+\] line \d+ Check ensures clause: SUCCESS$
7
7
^VERIFICATION SUCCESSFUL$
8
8
--
9
9
^warning: ignoring
Original file line number Diff line number Diff line change 3
3
--replace-call-with-contract f1
4
4
^EXIT=0$
5
5
^SIGNAL=0$
6
- ^\[precondition.\d+\] file main.c line \d+ Check requires clause: SUCCESS$
6
+ ^\[f1. precondition.\d+\] line \d+ Check requires clause: SUCCESS$
7
7
^VERIFICATION SUCCESSFUL$
8
8
--
9
9
^warning: ignoring
Original file line number Diff line number Diff line change 3
3
--enforce-contract f1
4
4
^EXIT=0$
5
5
^SIGNAL=0$
6
- ^\[postcondition.\d+\] file main.c line \d+ Check ensures clause: SUCCESS$
6
+ ^\[f1. postcondition.\d+\] line \d+ Check ensures clause: SUCCESS$
7
7
^\[f1.assigns.\d+\] line \d+ Check that arr\[\(.*\)\d\] is assignable: SUCCESS$
8
8
^VERIFICATION SUCCESSFUL$
9
9
--
Original file line number Diff line number Diff line change 3
3
--enforce-contract f1
4
4
^EXIT=0$
5
5
^SIGNAL=0$
6
- ^\[postcondition.\d+\] file main.c line \d+ Check ensures clause: SUCCESS$
6
+ ^\[f1. postcondition.\d+\] line \d+ Check ensures clause: SUCCESS$
7
7
^VERIFICATION SUCCESSFUL$
8
8
--
9
9
^warning: ignoring
Original file line number Diff line number Diff line change 3
3
--replace-call-with-contract f1
4
4
^EXIT=0$
5
5
^SIGNAL=0$
6
- ^\[precondition.\d+\] file main.c line \d+ Check requires clause: SUCCESS$
6
+ ^\[f1. precondition.\d+\] line \d+ Check requires clause: SUCCESS$
7
7
^VERIFICATION SUCCESSFUL$
8
8
--
9
9
^warning: ignoring
Original file line number Diff line number Diff line change 3
3
--enforce-contract foo
4
4
^EXIT=0$
5
5
^SIGNAL=0$
6
- \[postcondition.\d+\] file main.c line \d+ Check ensures clause: SUCCESS
6
+ \[foo. postcondition.\d+\] line \d+ Check ensures clause: SUCCESS
7
7
\[foo.assigns.\d+\] line \d+ Check that \*x is assignable: SUCCESS
8
8
\[foo.assigns.\d+\] line \d+ Check that \*y is assignable: SUCCESS
9
9
\[foo.assigns.\d+\] line \d+ Check that z is assignable: SUCCESS
Original file line number Diff line number Diff line change 3
3
--enforce-contract foo
4
4
^EXIT=0$
5
5
^SIGNAL=0$
6
- \[postcondition.\d+\] file main.c line \d+ Check ensures clause: SUCCESS
6
+ \[foo. postcondition.\d+\] line \d+ Check ensures clause: SUCCESS
7
7
\[foo.assigns.\d+\] line \d+ Check that \*x is assignable: SUCCESS
8
8
\[foo.assigns.\d+\] line \d+ Check that \*y is assignable: SUCCESS
9
9
\[foo.assigns.\d+\] line \d+ Check that z is assignable: SUCCESS
Original file line number Diff line number Diff line change 3
3
--enforce-contract foo
4
4
^EXIT=0$
5
5
^SIGNAL=0$
6
- \[postcondition.\d+\] file main.c line \d+ Check ensures clause: SUCCESS
6
+ \[foo. postcondition.\d+\] line \d+ Check ensures clause: SUCCESS
7
7
\[foo.assigns.\d+\] line \d+ Check that \*x is assignable: SUCCESS
8
8
\[main.assertion.\d+\] line \d+ assertion \!\(n \< 4\): SUCCESS
9
9
^VERIFICATION SUCCESSFUL$
Original file line number Diff line number Diff line change 3
3
--replace-call-with-contract foo
4
4
^EXIT=10$
5
5
^SIGNAL=0$
6
- \[precondition.\d+\] file main.c line \d+ Check requires clause: FAILURE
6
+ \[foo. precondition.\d+\] line \d+ Check requires clause: FAILURE
7
7
\[main.assertion.\d+\] line \d+ assertion \!\(n \< 4\): SUCCESS
8
8
^VERIFICATION FAILED$
9
9
--
Original file line number Diff line number Diff line change 3
3
--enforce-contract foo
4
4
^EXIT=0$
5
5
^SIGNAL=0$
6
- \[postcondition.\d+\] file main.c line \d+ Check ensures clause: SUCCESS
6
+ \[foo. postcondition.\d+\] line \d+ Check ensures clause: SUCCESS
7
7
\[foo.assigns.\d+\] line \d+ Check that \*x is assignable: SUCCESS
8
8
\[foo.assigns.\d+\] line \d+ Check that x\[\(.* int\)5\] is assignable: SUCCESS
9
9
\[foo.assigns.\d+\] line \d+ Check that x\[\(.* int\)9\] is assignable: SUCCESS
Original file line number Diff line number Diff line change 3
3
--replace-call-with-contract foo
4
4
^EXIT=0$
5
5
^SIGNAL=0$
6
- \[precondition.\d+\] file main.c line \d+ Check requires clause: SUCCESS
6
+ \[foo. precondition.\d+\] line \d+ Check requires clause: SUCCESS
7
7
\[main.assertion.\d+\] line \d+ assertion o >\= 10 \&\& o \=\= \*n \+ 5: SUCCESS
8
8
\[main.assertion.\d+\] line \d+ assertion n\[9\] == 113: SUCCESS
9
9
^VERIFICATION SUCCESSFUL$
Original file line number Diff line number Diff line change 3
3
--replace-call-with-contract foo
4
4
^EXIT=10$
5
5
^SIGNAL=0$
6
- \[precondition.\d+\] file main.c line \d+ Check requires clause: FAILURE
6
+ \[foo. precondition.\d+\] line \d+ Check requires clause: FAILURE
7
7
\[main.assertion.\d+\] line \d+ assertion o >\= 10 \&\& o \=\= \*n \+ 5: SUCCESS
8
8
^VERIFICATION FAILED$
9
9
--
Original file line number Diff line number Diff line change 3
3
--replace-call-with-contract sub_ptr_values
4
4
^EXIT=0$
5
5
^SIGNAL=0$
6
- \[precondition.\d+\] file main.c line \d+ Check requires clause: SUCCESS
6
+ \[sub_ptr_values. precondition.\d+\] line \d+ Check requires clause: SUCCESS
7
7
^VERIFICATION SUCCESSFUL$
8
8
--
9
9
--
Original file line number Diff line number Diff line change 3
3
--enforce-contract foo
4
4
^EXIT=0$
5
5
^SIGNAL=0$
6
- \[postcondition.\d+\] file main.c line \d+ Check ensures clause: SUCCESS
6
+ \[foo. postcondition.\d+\] line \d+ Check ensures clause: SUCCESS
7
7
\[foo.assigns.\d+\] line \d+ Check that \*x is assignable: SUCCESS
8
8
^VERIFICATION SUCCESSFUL$
9
9
--
Original file line number Diff line number Diff line change 3
3
--replace-call-with-contract foo
4
4
^EXIT=0$
5
5
^SIGNAL=0$
6
- \[precondition.\d+\] file main.c line \d+ Check requires clause: SUCCESS
6
+ \[foo. precondition.\d+\] line \d+ Check requires clause: SUCCESS
7
7
\[main.assertion.\d+\] line \d+ assertion \_\_CPROVER\_r\_ok\(n, sizeof\(int\)\): SUCCESS
8
8
\[main.assertion.\d+\] line \d+ assertion o >\= 10 \&\& o \=\= \*n \+ 5: SUCCESS
9
9
^VERIFICATION SUCCESSFUL$
Original file line number Diff line number Diff line change 3
3
--enforce-contract foo
4
4
^EXIT=0$
5
5
^SIGNAL=0$
6
- \[postcondition.\d+\] file main.c line \d+ Check ensures clause: SUCCESS
6
+ \[foo. postcondition.\d+\] line \d+ Check ensures clause: SUCCESS
7
7
\[foo.assigns.\d+\] line \d+ Check that x->baz is assignable: SUCCESS
8
8
\[foo.assigns.\d+\] line \d+ Check that x->qux is assignable: SUCCESS
9
9
\[main.assertion.\d+\] line \d+ assertion rval \=\= 10: SUCCESS
Original file line number Diff line number Diff line change 3
3
--enforce-contract foo
4
4
^EXIT=0$
5
5
^SIGNAL=0$
6
- \[postcondition.\d+\] file main.c line \d+ Check ensures clause: SUCCESS
6
+ \[foo. postcondition.\d+\] line \d+ Check ensures clause: SUCCESS
7
7
\[foo.assigns.\d+\] line \d+ Check that x->str\[\(.*\)\(x->len - 1\)\] is assignable: SUCCESS
8
8
\[main.assertion.\d+\] line \d+ assertion rval \=\= 128: SUCCESS
9
9
^VERIFICATION SUCCESSFUL$
Original file line number Diff line number Diff line change 3
3
--replace-call-with-contract foo
4
4
^EXIT=0$
5
5
^SIGNAL=0$
6
- \[precondition.\d+\] file main.c line \d+ Check requires clause: SUCCESS
6
+ \[foo. precondition.\d+\] line \d+ Check requires clause: SUCCESS
7
7
\[main.assertion.\d+\] line \d+ assertion rval \=\= x->baz \+ x->qux: SUCCESS
8
8
\[main.assertion.\d+\] line \d+ assertion \*x \=\= \*y: SUCCESS
9
9
^VERIFICATION SUCCESSFUL$
Original file line number Diff line number Diff line change 1
1
CORE
2
2
main.c
3
3
--apply-loop-contracts --replace-call-with-contract ackermann
4
- ^\[precondition\.\d+\] .* line 17 Check requires clause: SUCCESS$
5
- ^\[precondition\.\d+\] .* line 17 Check requires clause: SUCCESS$
4
+ ^\[ackermann. precondition\.\d+\] line 17 Check requires clause: SUCCESS$
5
+ ^\[ackermann. precondition\.\d+\] line 17 Check requires clause: SUCCESS$
6
6
^\[ackermann\.\d+\] line 21 Check loop invariant before entry: SUCCESS$
7
7
^\[ackermann\.\d+\] line 21 Check that loop invariant is preserved: SUCCESS$
8
8
^\[ackermann\.\d+\] line 21 Check decreases clause on loop iteration: SUCCESS$
You can’t perform that action at this time.
0 commit comments