-
Notifications
You must be signed in to change notification settings - Fork 269
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add tests for assumption uniqueness checking
- Loading branch information
Remi Delmas
committed
Jan 21, 2025
1 parent
2d5a8b2
commit 8a32d75
Showing
24 changed files
with
377 additions
and
0 deletions.
There are no files selected for viewing
20 changes: 20 additions & 0 deletions
20
regression/contracts-dfcc/test_pointer_predicate_enforce_requires_equals_equals_fail/main.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
void foo(int *x, int *y) | ||
// clang-format off | ||
__CPROVER_requires(__CPROVER_is_fresh(x, sizeof(int))) | ||
__CPROVER_requires(*x == 0) | ||
__CPROVER_requires(__CPROVER_pointer_equals(y, sizeof(int)) && __CPROVER_pointer_equals(y, x)) | ||
__CPROVER_assigns(*y) | ||
__CPROVER_ensures(*y == 1) | ||
__CPROVER_ensures(*x == 1) | ||
// clang-format on | ||
{ | ||
*y = 1; | ||
} | ||
|
||
int main() | ||
{ | ||
int *x; | ||
int *y; | ||
foo(x, y); | ||
return 0; | ||
} |
11 changes: 11 additions & 0 deletions
11
...ssion/contracts-dfcc/test_pointer_predicate_enforce_requires_equals_equals_fail/test.desc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
CORE dfcc-only | ||
main.c | ||
--dfcc main --enforce-contract foo | ||
^\[__CPROVER_contracts_pointer_equals.assertion.\d+\] line \d+ __CPROVER_pointer_equals does not conflict with other predicate: FAILURE$ | ||
^EXIT=10$ | ||
^SIGNAL=0$ | ||
^VERIFICATION FAILED$ | ||
-- | ||
-- | ||
Tests that assuming the more than one pointer predicate on the same target pointer | ||
at the same time triggers a failure. |
20 changes: 20 additions & 0 deletions
20
regression/contracts-dfcc/test_pointer_predicate_enforce_requires_equals_equals_pass/main.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
void foo(int *x, int *y) | ||
// clang-format off | ||
__CPROVER_requires(__CPROVER_is_fresh(x, sizeof(int))) | ||
__CPROVER_requires(*x == 0) | ||
__CPROVER_requires(__CPROVER_pointer_equals(y, x) || __CPROVER_pointer_equals(y, x)) | ||
__CPROVER_assigns(*y) | ||
__CPROVER_ensures(*y == 1) | ||
__CPROVER_ensures(*x == 1 || *x == 0) | ||
// clang-format on | ||
{ | ||
*y = 1; | ||
} | ||
|
||
int main() | ||
{ | ||
int *x; | ||
int *y; | ||
foo(x, y); | ||
return 0; | ||
} |
10 changes: 10 additions & 0 deletions
10
...ssion/contracts-dfcc/test_pointer_predicate_enforce_requires_equals_equals_pass/test.desc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
CORE dfcc-only | ||
main.c | ||
--dfcc main --enforce-contract foo | ||
^EXIT=0$ | ||
^SIGNAL=0$ | ||
^VERIFICATION SUCCESSFULL$ | ||
-- | ||
-- | ||
Tests that a same pointer can be the target of multiple pointer predicates as | ||
long as they do not apply at the same time. |
22 changes: 22 additions & 0 deletions
22
...ession/contracts-dfcc/test_pointer_predicate_enforce_requires_in_range_equals_fail/main.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
void foo(int *x, int *y) | ||
// clang-format off | ||
__CPROVER_requires(__CPROVER_is_fresh(x, sizeof(int))) | ||
__CPROVER_requires(*x == 0) | ||
__CPROVER_requires( | ||
__CPROVER_pointer_in_range_dfcc(x, y, x) && | ||
__CPROVER_pointer_equals(y, x)) | ||
__CPROVER_assigns(*y) | ||
__CPROVER_ensures(*y == 1) | ||
__CPROVER_ensures(*x == 1) | ||
// clang-format on | ||
{ | ||
*y = 1; | ||
} | ||
|
||
int main() | ||
{ | ||
int *x; | ||
int *y; | ||
foo(x, y); | ||
return 0; | ||
} |
11 changes: 11 additions & 0 deletions
11
...ion/contracts-dfcc/test_pointer_predicate_enforce_requires_in_range_equals_fail/test.desc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
CORE dfcc-only | ||
main.c | ||
--dfcc main --enforce-contract foo | ||
^\[__CPROVER_contracts_pointer_in_range_dfcc.assertion.\d+\] line \d+ __CPROVER_pointer_in_range_dfcc does not conflict with other predicate: FAILURE$ | ||
^EXIT=10$ | ||
^SIGNAL=0$ | ||
^VERIFICATION FAILED$ | ||
-- | ||
-- | ||
Tests that assuming the more than one pointer predicate on the same target pointer | ||
at the same time triggers a failure. |
22 changes: 22 additions & 0 deletions
22
...ession/contracts-dfcc/test_pointer_predicate_enforce_requires_in_range_equals_pass/main.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
void foo(int *x, int *y) | ||
// clang-format off | ||
__CPROVER_requires(__CPROVER_is_fresh(x, sizeof(int))) | ||
__CPROVER_requires(*x == 0) | ||
__CPROVER_requires( | ||
__CPROVER_pointer_in_range_dfcc(x, y, x) && | ||
__CPROVER_pointer_equals(y, x)) | ||
__CPROVER_assigns(*y) | ||
__CPROVER_ensures(*y == 1) | ||
__CPROVER_ensures(*x == 1) | ||
// clang-format on | ||
{ | ||
*y = 1; | ||
} | ||
|
||
int main() | ||
{ | ||
int *x; | ||
int *y; | ||
foo(x, y); | ||
return 0; | ||
} |
10 changes: 10 additions & 0 deletions
10
...ion/contracts-dfcc/test_pointer_predicate_enforce_requires_in_range_equals_pass/test.desc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
CORE dfcc-only | ||
main.c | ||
--dfcc main --enforce-contract foo | ||
^EXIT=0$ | ||
^SIGNAL=0$ | ||
^VERIFICATION SUCCESSFULL$ | ||
-- | ||
-- | ||
Tests that a same pointer can be the target of multiple pointer predicates as | ||
long as they do not apply at the same time. |
22 changes: 22 additions & 0 deletions
22
...sion/contracts-dfcc/test_pointer_predicate_enforce_requires_in_range_in_range_pass/main.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
void foo(int *x, int *y) | ||
// clang-format off | ||
__CPROVER_requires(__CPROVER_is_fresh(x, sizeof(int))) | ||
__CPROVER_requires(*x == 0) | ||
__CPROVER_requires( | ||
__CPROVER_pointer_in_range_dfcc(x, y, x) && | ||
__CPROVER_pointer_in_range_dfcc(x, y, x)) | ||
__CPROVER_assigns(*y) | ||
__CPROVER_ensures(*y == 1) | ||
__CPROVER_ensures(*x == 1) | ||
// clang-format on | ||
{ | ||
*y = 1; | ||
} | ||
|
||
int main() | ||
{ | ||
int *x; | ||
int *y; | ||
foo(x, y); | ||
return 0; | ||
} |
10 changes: 10 additions & 0 deletions
10
...n/contracts-dfcc/test_pointer_predicate_enforce_requires_in_range_in_range_pass/test.desc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
CORE dfcc-only | ||
main.c | ||
--dfcc main --enforce-contract foo | ||
^EXIT=0$ | ||
^SIGNAL=0$ | ||
^VERIFICATION SUCCESSFULL$ | ||
-- | ||
-- | ||
Tests that a same pointer can be the target of multiple pointer predicates as | ||
long as they do not apply at the same time. |
20 changes: 20 additions & 0 deletions
20
...ession/contracts-dfcc/test_pointer_predicate_enforce_requires_is_fresh_equals_fail/main.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
void foo(int *x, int *y) | ||
// clang-format off | ||
__CPROVER_requires(__CPROVER_is_fresh(x, sizeof(int))) | ||
__CPROVER_requires(*x == 0) | ||
__CPROVER_requires(__CPROVER_is_fresh(y, sizeof(int)) && __CPROVER_pointer_equals(y, x)) | ||
__CPROVER_assigns(*y) | ||
__CPROVER_ensures(*y == 1) | ||
__CPROVER_ensures(*x == 1 || *x == 0) | ||
// clang-format on | ||
{ | ||
*y = 1; | ||
} | ||
|
||
int main() | ||
{ | ||
int *x; | ||
int *y; | ||
foo(x, y); | ||
return 0; | ||
} |
11 changes: 11 additions & 0 deletions
11
...ion/contracts-dfcc/test_pointer_predicate_enforce_requires_is_fresh_equals_fail/test.desc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
CORE dfcc-only | ||
main.c | ||
--dfcc main --enforce-contract foo | ||
^\[__CPROVER_contracts_pointer_equals.assertion.\d+\] line \d+ __CPROVER_pointer_equals does not conflict with other predicate: FAILURE$ | ||
^EXIT=10$ | ||
^SIGNAL=0$ | ||
^VERIFICATION FAILED$ | ||
-- | ||
-- | ||
Tests that assuming the more than one pointer predicate on the same target pointer | ||
at the same time triggers a failure. |
20 changes: 20 additions & 0 deletions
20
...ession/contracts-dfcc/test_pointer_predicate_enforce_requires_is_fresh_equals_pass/main.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
void foo(int *x, int *y) | ||
// clang-format off | ||
__CPROVER_requires(__CPROVER_is_fresh(x, sizeof(int))) | ||
__CPROVER_requires(*x == 0) | ||
__CPROVER_requires(__CPROVER_is_fresh(y, sizeof(int)) || __CPROVER_pointer_equals(y, x)) | ||
__CPROVER_assigns(*y) | ||
__CPROVER_ensures(*y == 1) | ||
__CPROVER_ensures(*x == 1 || *x == 0) | ||
// clang-format on | ||
{ | ||
*y = 1; | ||
} | ||
|
||
int main() | ||
{ | ||
int *x; | ||
int *y; | ||
foo(x, y); | ||
return 0; | ||
} |
10 changes: 10 additions & 0 deletions
10
...ion/contracts-dfcc/test_pointer_predicate_enforce_requires_is_fresh_equals_pass/test.desc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
CORE dfcc-only | ||
main.c | ||
--dfcc main --enforce-contract foo | ||
^EXIT=0$ | ||
^SIGNAL=0$ | ||
^VERIFICATION SUCCESSFULL$ | ||
-- | ||
-- | ||
Tests that a same pointer can be the target of multiple pointer predicates as | ||
long as they do not apply at the same time. |
22 changes: 22 additions & 0 deletions
22
...sion/contracts-dfcc/test_pointer_predicate_enforce_requires_is_fresh_in_range_fail/main.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
void foo(int *x, int *y) | ||
// clang-format off | ||
__CPROVER_requires(__CPROVER_is_fresh(x, sizeof(int))) | ||
__CPROVER_requires(*x == 0) | ||
__CPROVER_requires( | ||
__CPROVER_is_fresh(y, sizeof(int)) && | ||
__CPROVER_pointer_in_range_dfcc(x, y, x)) | ||
__CPROVER_assigns(*y) | ||
__CPROVER_ensures(*y == 1) | ||
__CPROVER_ensures(*x == 1 || *x == 0) | ||
// clang-format on | ||
{ | ||
*y = 1; | ||
} | ||
|
||
int main() | ||
{ | ||
int *x; | ||
int *y; | ||
foo(x, y); | ||
return 0; | ||
} |
11 changes: 11 additions & 0 deletions
11
...n/contracts-dfcc/test_pointer_predicate_enforce_requires_is_fresh_in_range_fail/test.desc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
CORE dfcc-only | ||
main.c | ||
--dfcc main --enforce-contract foo | ||
^\[__CPROVER_contracts_pointer_in_range_dfcc.assertion.\d+\] line \d+ __CPROVER_pointer_in_range_dfcc does not conflict with other predicate: FAILURE$ | ||
^EXIT=10$ | ||
^SIGNAL=0$ | ||
^VERIFICATION FAILED$ | ||
-- | ||
-- | ||
Tests that assuming the more than one pointer predicate on the same target pointer | ||
at the same time triggers a failure. |
23 changes: 23 additions & 0 deletions
23
...sion/contracts-dfcc/test_pointer_predicate_enforce_requires_is_fresh_in_range_pass/main.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
void foo(int *x, int *y) | ||
// clang-format off | ||
__CPROVER_requires(__CPROVER_is_fresh(x, sizeof(int))) | ||
__CPROVER_requires(*x == 0) | ||
__CPROVER_requires(x[SIZE-1] == 0) | ||
__CPROVER_requires( | ||
__CPROVER_is_fresh(y, sizeof(int)) || | ||
__CPROVER_pointer_in_range_dfcc(x, y, x)) | ||
__CPROVER_assigns(*y) | ||
__CPROVER_ensures(*y == 1) | ||
__CPROVER_ensures(*x == 1 || *x == 0) | ||
// clang-format on | ||
{ | ||
*y = 1; | ||
} | ||
|
||
int main() | ||
{ | ||
int *x; | ||
int *y; | ||
foo(x, y); | ||
return 0; | ||
} |
10 changes: 10 additions & 0 deletions
10
...n/contracts-dfcc/test_pointer_predicate_enforce_requires_is_fresh_in_range_pass/test.desc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
CORE dfcc-only | ||
main.c | ||
--dfcc main --enforce-contract foo | ||
^EXIT=0$ | ||
^SIGNAL=0$ | ||
^VERIFICATION SUCCESSFULL$ | ||
-- | ||
-- | ||
Tests that a same pointer can be the target of multiple pointer predicates as | ||
long as they do not apply at the same time. |
17 changes: 17 additions & 0 deletions
17
...sion/contracts-dfcc/test_pointer_predicate_enforce_requires_is_fresh_is_fresh_fail/main.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
void foo(int *x) | ||
// clang-format off | ||
__CPROVER_requires( | ||
__CPROVER_is_fresh(x, sizeof(int)) && __CPROVER_is_fresh(x, sizeof(int))) | ||
__CPROVER_assigns(*x) | ||
__CPROVER_ensures(*x == 0) | ||
// clang-format on | ||
{ | ||
*x = 0; | ||
} | ||
|
||
int main() | ||
{ | ||
int *x; | ||
foo(x); | ||
return 0; | ||
} |
11 changes: 11 additions & 0 deletions
11
...n/contracts-dfcc/test_pointer_predicate_enforce_requires_is_fresh_is_fresh_fail/test.desc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
CORE dfcc-only | ||
main.c | ||
--dfcc main --enforce-contract foo | ||
^\[__CPROVER_contracts_is_fresh.assertion.\d+\] line \d+ __CPROVER_is_fresh does not conflict with other predicate: FAILURE$ | ||
^EXIT=10$ | ||
^SIGNAL=0$ | ||
^VERIFICATION FAILED$ | ||
-- | ||
-- | ||
Tests that assuming the more than one pointer predicate on the same target pointer | ||
at the same time triggers a failure. |
17 changes: 17 additions & 0 deletions
17
...sion/contracts-dfcc/test_pointer_predicate_enforce_requires_is_fresh_is_fresh_pass/main.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
void foo(int *x) | ||
// clang-format off | ||
__CPROVER_requires( | ||
__CPROVER_is_fresh(x, sizeof(int)) || __CPROVER_is_fresh(x, sizeof(int))) | ||
__CPROVER_assigns(*x) | ||
__CPROVER_ensures(*x == 0) | ||
// clang-format on | ||
{ | ||
*x = 0; | ||
} | ||
|
||
int main() | ||
{ | ||
int *x; | ||
foo(x); | ||
return 0; | ||
} |
14 changes: 14 additions & 0 deletions
14
...n/contracts-dfcc/test_pointer_predicate_enforce_requires_is_fresh_is_fresh_pass/test.desc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
CORE dfcc-only | ||
main.c | ||
--dfcc main --enforce-contract foo | ||
^EXIT=0$ | ||
^SIGNAL=0$ | ||
^VERIFICATION SUCCESSFULL$ | ||
-- | ||
-- | ||
Tests that a same pointer can be the target of multiple pointer predicates as | ||
long as they do not apply at the same time. | ||
- `x` is fresh and inialized to 0 | ||
- `y` is equal to `x`if select is true, or fresh otherwise | ||
- foo assigns y to 1 | ||
- x is equal to 1 if select is true, 0 otherwise |
22 changes: 22 additions & 0 deletions
22
regression/contracts-dfcc/test_pointer_predicate_requires_in_range_in_range_fail/main.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
void foo(int *x, int *y) | ||
// clang-format off | ||
__CPROVER_requires(__CPROVER_is_fresh(x, sizeof(int))) | ||
__CPROVER_requires(*x == 0) | ||
__CPROVER_requires( | ||
__CPROVER_pointer_in_range_dfcc(x, y, x) && | ||
__CPROVER_pointer_in_range_dfcc(x, y, x)) | ||
__CPROVER_assigns(*y) | ||
__CPROVER_ensures(*y == 1) | ||
__CPROVER_ensures(*x == 1) | ||
// clang-format on | ||
{ | ||
*y = 1; | ||
} | ||
|
||
int main() | ||
{ | ||
int *x; | ||
int *y; | ||
foo(x, y); | ||
return 0; | ||
} |
Oops, something went wrong.