Skip to content

Commit 604d12c

Browse files
committed
Enhance checks in regression tests of issue 6231.
Also, skip the `--z3` test on machines that don't have a z3 binary installed.
1 parent c813374 commit 604d12c

File tree

10 files changed

+49
-14
lines changed

10 files changed

+49
-14
lines changed
Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1-
add_test_pl_tests(
2-
"$<TARGET_FILE:cbmc>"
3-
)
1+
find_program(Z3_EXISTS "z3")
2+
message(${Z3_EXISTS})
3+
if(Z3_EXISTS)
4+
add_test_pl_tests(
5+
"$<TARGET_FILE:cbmc>"
6+
)
7+
else()
8+
add_test_pl_tests(
9+
"$<TARGET_FILE:cbmc>" -X smt-backend
10+
)
11+
endif()

regression/cbmc-primitives/exists_memory_checks/invalid_index_range.desc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ invalid_index_range.c
44
^EXIT=10$
55
^SIGNAL=0$
66
^VERIFICATION FAILED$
7+
\[main\.assertion\.1\] line 9 assertion __CPROVER_exists \{ int i; \(0 <= i && i < 20\) && a\[i\] == i \*i \}: SUCCESS
78
line 9 dereference failure: pointer outside object bounds in a\[\(signed (long|long long) int\)i\]: FAILURE
89
--
910
--

regression/cbmc-primitives/exists_memory_checks/negated_exists.desc

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,13 @@ negated_exists.c
44
^EXIT=0$
55
^SIGNAL=0$
66
^VERIFICATION SUCCESSFUL$
7-
line 9 dereference failure:.*SUCCESS
7+
\[main\.assertion\.1\] line 9 assertion !__CPROVER_exists \{ int i; \(0 <= i && i < 10\) && a\[i\] == 42 \}: SUCCESS
8+
\[main\.pointer_dereference\.7\] line 9 dereference failure: pointer NULL in a\[\(signed long int\)i\]: SUCCESS
9+
\[main\.pointer_dereference\.8\] line 9 dereference failure: pointer invalid in a\[\(signed long int\)i\]: SUCCESS
10+
\[main\.pointer_dereference\.9\] line 9 dereference failure: deallocated dynamic object in a\[\(signed long int\)i\]: SUCCESS
11+
\[main\.pointer_dereference\.10\] line 9 dereference failure: dead object in a\[\(signed long int\)i\]: SUCCESS
12+
\[main\.pointer_dereference\.11\] line 9 dereference failure: pointer outside object bounds in a\[\(signed long int\)i\]: SUCCESS
13+
\[main\.pointer_dereference\.12\] line 9 dereference failure: invalid integer address in a\[\(signed long int\)i\]: SUCCESS
814
--
915
--
1016
Check that memory checks pass for valid pointer dereferences inside a negated

regression/cbmc-primitives/exists_memory_checks/smt_missing_range_check.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
CORE
1+
CORE smt-backend
22
smt_missing_range_check.c
33
--pointer-check -z3
44
^EXIT=10$

regression/cbmc-primitives/exists_memory_checks/valid_index_range.desc

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,13 @@ valid_index_range.c
44
^EXIT=0$
55
^SIGNAL=0$
66
^VERIFICATION SUCCESSFUL$
7-
line 9 dereference failure:.*SUCCESS
7+
\[main\.assertion\.1\] line 9 assertion __CPROVER_exists \{ int i; \(0 <= i && i < 10\) && a\[i\] == i \*i \}: SUCCESS
8+
\[main\.pointer_dereference\.7\] line 9 dereference failure: pointer NULL in a\[\(signed long int\)i\]: SUCCESS
9+
\[main\.pointer_dereference\.8\] line 9 dereference failure: pointer invalid in a\[\(signed long int\)i\]: SUCCESS
10+
\[main\.pointer_dereference\.9\] line 9 dereference failure: deallocated dynamic object in a\[\(signed long int\)i\]: SUCCESS
11+
\[main\.pointer_dereference\.10\] line 9 dereference failure: dead object in a\[\(signed long int\)i\]: SUCCESS
12+
\[main\.pointer_dereference\.11\] line 9 dereference failure: pointer outside object bounds in a\[\(signed long int\)i\]: SUCCESS
13+
\[main\.pointer_dereference\.12\] line 9 dereference failure: invalid integer address in a\[\(signed long int\)i\]: SUCCESS
814
--
915
--
1016
Check that memory checks pass for valid pointer dereferences inside an

regression/cbmc-primitives/forall_6231_1/test.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ int main() {
77

88
assert(*a == *a);
99

10-
// BUG: no errors even with `--pointer-check` enabled -- now fixed.
10+
// BUG: In https://github.com/diffblue/cbmc/issues/6231, it was reported that
11+
// no checks would be performed on the derefence inside the quantified statement,
12+
// even when explicitly requested via for instance `--pointer-check`, because
13+
// we would simply skip over these quantified statements in goto-check.
1114
assert(
1215
__CPROVER_forall {
1316
int i ; (0 <= i && i < 1) ==> *(a+i) == *(a+i)

regression/cbmc-primitives/forall_6231_2/test.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55
int main() {
66
char *a = malloc(128);
77

8+
// BUG: In https://github.com/diffblue/cbmc/issues/6231, it was reported that
9+
// no checks would be performed on the derefence inside the quantified statement,
10+
// even when explicitly requested via for instance `--pointer-check`, because
11+
// we would simply skip over these quantified statements in goto-check.
812
assert(
913
__CPROVER_forall {
1014
int i ; (0 <= i && i < 1) ==> *(a+i) == *(a+i)

regression/cbmc-primitives/forall_6231_2/test.desc

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ test.c
44
^EXIT=0$
55
^SIGNAL=0$
66
\[main\.assertion\.1\] line \d+ assertion __CPROVER_forall \{ int i ; \(0 <= i && i < 1\) ==> \*\(a\+i\) == \*\(a\+i\) \}: SUCCESS
7-
\[main\.pointer_dereference\.1\] line \d dereference failure: pointer NULL in a\[\(signed (long|long long) int\)i\]: SUCCESS
8-
\[main\.pointer_dereference\.2\] line \d dereference failure: pointer invalid in a\[\(signed (long|long long) int\)i\]: SUCCESS
9-
\[main\.pointer_dereference\.3\] line \d dereference failure: deallocated dynamic object in a\[\(signed (long|long long) int\)i\]: SUCCESS
10-
\[main\.pointer_dereference\.4\] line \d dereference failure: dead object in a\[\(signed (long|long long) int\)i\]: SUCCESS
11-
\[main\.pointer_dereference\.5\] line \d dereference failure: pointer outside object bounds in a\[\(signed (long|long long) int\)i\]: SUCCESS
12-
\[main\.pointer_dereference\.6\] line \d dereference failure: invalid integer address in a\[\(signed (long|long long) int\)i\]: SUCCESS
7+
\[main\.pointer_dereference\.1\] line \d+ dereference failure: pointer NULL in a\[\(signed (long|long long) int\)i\]: SUCCESS
8+
\[main\.pointer_dereference\.2\] line \d+ dereference failure: pointer invalid in a\[\(signed (long|long long) int\)i\]: SUCCESS
9+
\[main\.pointer_dereference\.3\] line \d+ dereference failure: deallocated dynamic object in a\[\(signed (long|long long) int\)i\]: SUCCESS
10+
\[main\.pointer_dereference\.4\] line \d+ dereference failure: dead object in a\[\(signed (long|long long) int\)i\]: SUCCESS
11+
\[main\.pointer_dereference\.5\] line \d+ dereference failure: pointer outside object bounds in a\[\(signed (long|long long) int\)i\]: SUCCESS
12+
\[main\.pointer_dereference\.6\] line \d+ dereference failure: invalid integer address in a\[\(signed (long|long long) int\)i\]: SUCCESS
1313
\[main\.assertion.2] line \d+ assertion __CPROVER_forall \{ int j; \!\(0 <= j && j < 1\) || \(j == 0 && \*\(a\+j\) == \*\(a+j\)\) \}: SUCCESS
1414
\[main\.pointer_dereference\.7] line \d+ dereference failure: pointer NULL in a\[\(signed (long|long long) int\)j\]: SUCCESS
1515
\[main\.pointer_dereference\.8] line \d+ dereference failure: pointer invalid in a\[\(signed (long|long long) int\)j\]: SUCCESS

regression/cbmc-primitives/forall_6231_3/test.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@ int main() {
1111

1212
assert(*a == *a);
1313

14-
// BUG: no errors even with `--pointer-check` enabled -- now fixed.
14+
// BUG: In https://github.com/diffblue/cbmc/issues/6231, it was reported that
15+
// no checks would be performed on the derefence inside the quantified statement,
16+
// even when explicitly requested via for instance `--pointer-check`, because
17+
// we would simply skip over these quantified statements in goto-check.
1518
assert(
1619
__CPROVER_forall {
1720
int i ; (0 <= i && i < 10) ==> *(a+i) == *(a+i)

regression/cbmc-primitives/forall_6231_4/test.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ int main() {
1010
char *a = malloc(10);
1111
int n;
1212

13+
// BUG: In https://github.com/diffblue/cbmc/issues/6231, it was reported that
14+
// no checks would be performed on the derefence inside the quantified statement,
15+
// even when explicitly requested via for instance `--pointer-check`, because
16+
// we would simply skip over these quantified statements in goto-check.
1317
assert(
1418
__CPROVER_forall {
1519
int i ; (0 <= i && i < (n / 0)) /* (n / 0) should be caught by --div-by-zero-check */

0 commit comments

Comments
 (0)