Skip to content

Commit 7c1f67a

Browse files
committed
CONTRACTS: Avoid single conjunction in contracts instrumentation
Currently, requires and ensures clauses are always combined into a single conjunction. The resulting clause is then used to create a single assertion or assumption, which makes really difficult to debug issues with large function contracts. This commit preserves the source location of the clauses by creating one assertion/assumption for each clause in the function contract (i.e., either requires or ensures). Signed-off-by: Felipe R. Monteiro <felisous@amazon.com>
1 parent 4db88f2 commit 7c1f67a

File tree

15 files changed

+121
-123
lines changed

15 files changed

+121
-123
lines changed

regression/contracts/assigns-replace-ignored-return-value/test.desc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
CORE
22
main.c
33
--replace-call-with-contract bar --replace-call-with-contract baz --enforce-contract foo
4+
^\[bar.precondition.\d+\] line \d+ Check bar's requires clause in foo: SUCCESS$
5+
^\[baz.precondition.\d+\] line \d+ Check baz's requires clause in foo: SUCCESS$
46
^EXIT=0$
57
^SIGNAL=0$
68
^VERIFICATION SUCCESSFUL$

regression/contracts/assigns-replace-malloc-zero/test.desc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
CORE
22
main.c
33
--replace-call-with-contract foo _ --malloc-may-fail --malloc-fail-null
4+
^\[foo.precondition.\d+\] line \d+ Check foo's requires clause in main: SUCCESS$
45
^EXIT=0$
56
^SIGNAL=0$
67
\[main\.assertion\.1\] line 35 expecting SUCCESS: SUCCESS$

regression/contracts/history-pointer-replace-04/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ main.c
33
--replace-call-with-contract foo
44
^EXIT=10$
55
^SIGNAL=0$
6-
^\[foo.precondition.\d+\] line \d+ Check requires clause: SUCCESS$
6+
^\[foo.precondition.\d+\] line \d+ Check foo's requires clause in main: SUCCESS$
77
^\[main.assertion.\d+\] line \d+ assertion p->y \!\= 7: FAILURE$
88
^VERIFICATION FAILED$
99
--

regression/contracts/quantifiers-exists-both-replace/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ main.c
33
--replace-call-with-contract f1
44
^EXIT=0$
55
^SIGNAL=0$
6-
^\[f1.precondition.\d+\] line \d+ Check requires clause: SUCCESS$
6+
^\[f1.precondition.\d+\] line \d+ Check f1's requires clause in main: SUCCESS$
77
^VERIFICATION SUCCESSFUL$
88
--
99
^warning: ignoring

regression/contracts/quantifiers-exists-requires-replace/test.desc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ main.c
33
--replace-call-with-contract f1 --replace-call-with-contract f2
44
^EXIT=10$
55
^SIGNAL=0$
6-
^\[f1.precondition.\d+\] line \d+ Check requires clause: SUCCESS$
7-
^\[f2.precondition.\d+\] line \d+ Check requires clause: FAILURE$
6+
^\[f1.precondition.\d+\] line \d+ Check f1's requires clause in main: SUCCESS$
7+
^\[f2.precondition.\d+\] line \d+ Check f2's requires clause in main: FAILURE$
88
^VERIFICATION FAILED$
99
--
1010
^warning: ignoring

regression/contracts/quantifiers-forall-both-replace/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ main.c
33
--replace-call-with-contract f1
44
^EXIT=0$
55
^SIGNAL=0$
6-
^\[f1.precondition.\d+\] line \d+ Check requires clause: SUCCESS$
6+
^\[f1.precondition.\d+\] line \d+ Check f1's requires clause in main: SUCCESS$
77
^VERIFICATION SUCCESSFUL$
88
--
99
^warning: ignoring

regression/contracts/quantifiers-forall-requires-replace/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ main.c
33
--replace-call-with-contract f1
44
^EXIT=0$
55
^SIGNAL=0$
6-
^\[f1.precondition.\d+\] line \d+ Check requires clause: SUCCESS$
6+
^\[f1.precondition.\d+\] line \d+ Check f1's requires clause in main: SUCCESS$
77
^VERIFICATION SUCCESSFUL$
88
--
99
^warning: ignoring

regression/contracts/test_aliasing_replace/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ main.c
33
--replace-call-with-contract foo
44
^EXIT=10$
55
^SIGNAL=0$
6-
\[foo.precondition.\d+\] line \d+ Check requires clause: FAILURE
6+
\[foo.precondition.\d+\] line \d+ Check foo's requires clause in main: FAILURE
77
\[main.assertion.\d+\] line \d+ assertion \!\(n \< 4\): SUCCESS
88
^VERIFICATION FAILED$
99
--

regression/contracts/test_array_memory_replace/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ main.c
33
--replace-call-with-contract foo
44
^EXIT=0$
55
^SIGNAL=0$
6-
\[foo.precondition.\d+\] line \d+ Check requires clause: SUCCESS
6+
\[foo.precondition.\d+\] line \d+ Check foo's requires clause in main: SUCCESS
77
\[main.assertion.\d+\] line \d+ assertion o >\= 10 \&\& o \=\= \*n \+ 5: SUCCESS
88
\[main.assertion.\d+\] line \d+ assertion n\[9\] == 113: SUCCESS
99
^VERIFICATION SUCCESSFUL$

regression/contracts/test_array_memory_too_small_replace/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ main.c
33
--replace-call-with-contract foo
44
^EXIT=10$
55
^SIGNAL=0$
6-
\[foo.precondition.\d+\] line \d+ Check requires clause: FAILURE
6+
\[foo.precondition.\d+\] line \d+ Check foo's requires clause in main: FAILURE
77
\[main.assertion.\d+\] line \d+ assertion o >\= 10 \&\& o \=\= \*n \+ 5: SUCCESS
88
^VERIFICATION FAILED$
99
--

0 commit comments

Comments
 (0)