Skip to content

Commit d8b1c77

Browse files
authored
Merge pull request #7454 from qinheping/expr2c
Add CPROVER prefix to memory primitives produced by expr2c
2 parents aaa6d81 + 954df79 commit d8b1c77

File tree

8 files changed

+35
-34
lines changed

8 files changed

+35
-34
lines changed

regression/cbmc/pointer-primitive-check-01/test.desc

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ main.c
33
--pointer-primitive-check
44
^EXIT=10$
55
^SIGNAL=0$
6-
\[main.pointer_primitives.\d+\] line \d+ pointer invalid in OBJECT_SIZE\(\(const void \*\)p4\): FAILURE
7-
\[main.pointer_primitives.\d+\] line \d+ deallocated dynamic object in OBJECT_SIZE\(\(const void \*\)p4\): SUCCESS
8-
\[main.pointer_primitives.\d+\] line \d+ dead object in OBJECT_SIZE\(\(const void \*\)p4\): SUCCESS
9-
\[main.pointer_primitives.\d+\] line \d+ pointer outside object bounds in OBJECT_SIZE\(\(const void \*\)p4\): FAILURE
6+
\[main.pointer_primitives.\d+\] line \d+ pointer invalid in __CPROVER_OBJECT_SIZE\(\(const void \*\)p4\): FAILURE
7+
\[main.pointer_primitives.\d+\] line \d+ deallocated dynamic object in __CPROVER_OBJECT_SIZE\(\(const void \*\)p4\): SUCCESS
8+
\[main.pointer_primitives.\d+\] line \d+ dead object in __CPROVER_OBJECT_SIZE\(\(const void \*\)p4\): SUCCESS
9+
\[main.pointer_primitives.\d+\] line \d+ pointer outside object bounds in __CPROVER_OBJECT_SIZE\(\(const void \*\)p4\): FAILURE
1010
\[main.pointer_primitives.\d+\] line \d+ pointer invalid in R_OK\(p5, .*1\): FAILURE
1111
\[main.pointer_primitives.\d+\] line \d+ deallocated dynamic object in R_OK\(p5, .*1\): SUCCESS
1212
\[main.pointer_primitives.\d+\] line \d+ dead object in R_OK\(p5, .*1\): SUCCESS
@@ -21,18 +21,18 @@ main.c
2121
\[main.pointer_primitives.\d+\] line \d+ pointer outside object bounds in IS_DYNAMIC_OBJECT\(\(const void \*\)p7\): FAILURE
2222
--
2323
^warning: ignoring
24-
\[main.pointer_primitives\.\d+\] line \d+ pointer invalid in POINTER_OBJECT\(\(const void \*\)p1\): FAILURE
25-
\[main.pointer_primitives\.\d+\] line \d+ deallocated dynamic object in POINTER_OBJECT\(\(const void \*\)p1\): SUCCESS
26-
\[main.pointer_primitives\.\d+\] line \d+ dead object in POINTER_OBJECT\(\(const void \*\)p1\): SUCCESS
27-
\[main.pointer_primitives\.\d+\] line \d+ pointer outside object bounds in POINTER_OBJECT\(\(const void \*\)p1\): FAILURE
28-
\[main.pointer_primitives\.\d+\] line \d+ pointer invalid in POINTER_OFFSET\(\(const void \*\)p2\): FAILURE
29-
\[main.pointer_primitives\.\d+\] line \d+ deallocated dynamic object in POINTER_OFFSET\(\(const void \*\)p2\): SUCCESS
30-
\[main.pointer_primitives\.\d+\] line \d+ dead object in POINTER_OFFSET\(\(const void \*\)p2\): SUCCESS
31-
\[main.pointer_primitives\.\d+\] line \d+ pointer outside object bounds in POINTER_OFFSET\(\(const void \*\)p2\): FAILURE
32-
\[main.pointer_primitives\.\d+\] line \d+ pointer invalid in POINTER_OBJECT\(\(const void \*\)p3\): FAILURE
33-
\[main.pointer_primitives\.\d+\] line \d+ deallocated dynamic object in POINTER_OBJECT\(\(const void \*\)p3\): SUCCESS
34-
\[main.pointer_primitives\.\d+\] line \d+ dead object in POINTER_OBJECT\(\(const void \*\)p3\): SUCCESS
35-
\[main.pointer_primitives\.\d+\] line \d+ pointer outside object bounds in POINTER_OBJECT\(\(const void \*\)p3\): FAILURE
24+
\[main.pointer_primitives\.\d+\] line \d+ pointer invalid in __CPROVER_POINTER_OBJECT\(\(const void \*\)p1\): FAILURE
25+
\[main.pointer_primitives\.\d+\] line \d+ deallocated dynamic object in __CPROVER_POINTER_OBJECT\(\(const void \*\)p1\): SUCCESS
26+
\[main.pointer_primitives\.\d+\] line \d+ dead object in __CPROVER_POINTER_OBJECT\(\(const void \*\)p1\): SUCCESS
27+
\[main.pointer_primitives\.\d+\] line \d+ pointer outside object bounds in __CPROVER_POINTER_OBJECT\(\(const void \*\)p1\): FAILURE
28+
\[main.pointer_primitives\.\d+\] line \d+ pointer invalid in __CPROVER_POINTER_OFFSET\(\(const void \*\)p2\): FAILURE
29+
\[main.pointer_primitives\.\d+\] line \d+ deallocated dynamic object in __CPROVER_POINTER_OFFSET\(\(const void \*\)p2\): SUCCESS
30+
\[main.pointer_primitives\.\d+\] line \d+ dead object in __CPROVER_POINTER_OFFSET\(\(const void \*\)p2\): SUCCESS
31+
\[main.pointer_primitives\.\d+\] line \d+ pointer outside object bounds in __CPROVER_POINTER_OFFSET\(\(const void \*\)p2\): FAILURE
32+
\[main.pointer_primitives\.\d+\] line \d+ pointer invalid in __CPROVER_POINTER_OBJECT\(\(const void \*\)p3\): FAILURE
33+
\[main.pointer_primitives\.\d+\] line \d+ deallocated dynamic object in __CPROVER_POINTER_OBJECT\(\(const void \*\)p3\): SUCCESS
34+
\[main.pointer_primitives\.\d+\] line \d+ dead object in __CPROVER_POINTER_OBJECT\(\(const void \*\)p3\): SUCCESS
35+
\[main.pointer_primitives\.\d+\] line \d+ pointer outside object bounds in __CPROVER_POINTER_OBJECT\(\(const void \*\)p3\): FAILURE
3636
--
3737
Verifies that checks are added for exactly those pointer primitives that are not
3838
universally well defined.

regression/contracts/assigns_enforce_18/test.desc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@ CORE
22
main.c
33
--enforce-contract foo --enforce-contract bar --enforce-contract baz _ --pointer-primitive-check
44
^\[foo.assigns.\d+\] line 7 Check that \*xp is valid: SUCCESS$
5-
^\[foo.assigns.\d+\] line 11 Check that POINTER_OBJECT\(\(void \*\)yp\) is assignable: SUCCESS$
5+
^\[foo.assigns.\d+\] line 11 Check that __CPROVER_POINTER_OBJECT\(\(void \*\)yp\) is assignable: SUCCESS$
66
^\[foo.assigns.\d+\] line 13 Check that \*xp is assignable: SUCCESS$
77
^\[foo.assigns.\d+\] line 14 Check that y is assignable: FAILURE$
88
^\[bar.assigns.\d+\] line 17 Check that \*a is valid: SUCCESS$
99
^\[bar.assigns.\d+\] line 17 Check that \*b is valid: SUCCESS$
10-
^\[bar.assigns.\d+\] line 19 Check that POINTER_OBJECT\(\(void \*\)a\) is assignable: SUCCESS$
10+
^\[bar.assigns.\d+\] line 19 Check that __CPROVER_POINTER_OBJECT\(\(void \*\)a\) is assignable: SUCCESS$
1111
^\[bar.assigns.\d+\] line 20 Check that \*b is assignable: SUCCESS$
1212
^\[baz.assigns.\d+\] line 23 Check that \*a is valid: SUCCESS$
13-
^\[baz.assigns.\d+\] line 25 Check that POINTER_OBJECT\(\(void \*\)c\) is assignable: FAILURE$
13+
^\[baz.assigns.\d+\] line 25 Check that __CPROVER_POINTER_OBJECT\(\(void \*\)c\) is assignable: FAILURE$
1414
^\[baz.assigns.\d+\] line 26 Check that \*a is assignable: SUCCESS$
1515
^VERIFICATION FAILED$
1616
^EXIT=10$

regression/contracts/assigns_enforce_20/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ main.c
33
--enforce-contract foo
44
^EXIT=10$
55
^SIGNAL=0$
6-
^\[foo.assigns.\d+\] line \d+ Check that POINTER_OBJECT\((\(.+\))?y\) is assignable: FAILURE$
6+
^\[foo.assigns.\d+\] line \d+ Check that __CPROVER_POINTER_OBJECT\((\(.+\))?y\) is assignable: FAILURE$
77
^\[foo.assigns.\d+\] line \d+ Check that x is assignable: FAILURE$
88
^VERIFICATION FAILED$
99
--

regression/contracts/assigns_enforce_arrays_02/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ main.c
77
^\[f2.assigns.\d+\] line 12 Check that __CPROVER_object_whole\(\(.* \*\)a\) is valid: SUCCESS$
88
^\[f2.assigns.\d+\] line 14 Check that a\[.*0\] is assignable: SUCCESS$
99
^\[f2.assigns.\d+\] line 15 Check that a\[.*5\] is assignable: SUCCESS$
10-
^\[f2.assigns.\d+\] line 16 Check that POINTER_OBJECT\(\(.* \*\)a\) is assignable: SUCCESS$
10+
^\[f2.assigns.\d+\] line 16 Check that __CPROVER_POINTER_OBJECT\(\(.* \*\)a\) is assignable: SUCCESS$
1111
^EXIT=10$
1212
^SIGNAL=0$
1313
^VERIFICATION FAILED$

regression/contracts/assigns_enforce_conditional_unions/test.desc

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,15 @@ main.c
77
^\[update.assigns.\d+] line 77 Check that state->digest.high_level.second.ctx->flags is valid when .*: SUCCESS
88
^\[is_high_level.assigns.\d+\] line 50 Check that latch is assignable: SUCCESS$
99
^\[is_high_level.assigns.\d+\] line 51 Check that once is assignable: SUCCESS$
10-
^\[update.assigns.\d+\] line 84 Check that POINTER_OBJECT\(\(void \*\)state->digest.high_level.first.ctx->digest\) is assignable: SUCCESS$
10+
^\[update.assigns.\d+\] line 84 Check that __CPROVER_POINTER_OBJECT\(\(void \*\)state->digest.high_level.first.ctx->digest\) is assignable: SUCCESS$
1111
^\[update.assigns.\d+\] line 85 Check that state->digest.high_level.first.ctx->flags is assignable: SUCCESS$
12-
^\[update.assigns.\d+\] line 90 Check that POINTER_OBJECT\(\(void \*\)state->digest.high_level.second.ctx->digest\) is assignable: SUCCESS$
12+
^\[update.assigns.\d+\] line 90 Check that __CPROVER_POINTER_OBJECT\(\(void \*\)state->digest.high_level.second.ctx->digest\) is assignable: SUCCESS$
1313
^\[update.assigns.\d+\] line 91 Check that state->digest.high_level.second.ctx->flags is assignable: SUCCESS$
14-
^\[update.assigns.\d+\] line 95 Check that POINTER_OBJECT\(\(void \*\)state->digest.high_level.second.ctx->digest\) is assignable: FAILURE$
14+
^\[update.assigns.\d+\] line 95 Check that __CPROVER_POINTER_OBJECT\(\(void \*\)state->digest.high_level.second.ctx->digest\) is assignable: FAILURE$
1515
^\[update.assigns.\d+\] line 96 Check that state->digest.high_level.second.ctx->flags is assignable: FAILURE$
16-
^\[update.assigns.\d+\] line 100 Check that POINTER_OBJECT\(\(void \*\)state->digest.high_level.first.ctx->digest\) is assignable: FAILURE$
16+
^\[update.assigns.\d+\] line 100 Check that __CPROVER_POINTER_OBJECT\(\(void \*\)state->digest.high_level.first.ctx->digest\) is assignable: FAILURE$
1717
^\[update.assigns.\d+\] line 101 Check that state->digest.high_level.first.ctx->flags is assignable: FAILURE$
18-
^\[update.assigns.\d+\] line 104 Check that POINTER_OBJECT\(\(void \*\)state->digest.high_level.second.ctx->digest\) is assignable: FAILURE$
18+
^\[update.assigns.\d+\] line 104 Check that __CPROVER_POINTER_OBJECT\(\(void \*\)state->digest.high_level.second.ctx->digest\) is assignable: FAILURE$
1919
^\[update.assigns.\d+\] line 105 Check that state->digest.high_level.second.ctx->flags is assignable: FAILURE$
2020
^VERIFICATION FAILED$
2121
^EXIT=10$

regression/contracts/assigns_enforce_free_dead/test.desc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ main.c
1010
^\[foo.assigns.\d+\] line \d+ Check that \*q is assignable: SUCCESS$
1111
^\[foo.assigns.\d+\] line \d+ Check that \*w is assignable: SUCCESS$
1212
^\[foo.assigns.\d+\] line \d+ Check that \*x is assignable: SUCCESS$
13-
^\[foo.assigns.\d+\] line \d+ Check that POINTER_OBJECT\(\(void \*\)z\) is assignable: SUCCESS$
13+
^\[foo.assigns.\d+\] line \d+ Check that __CPROVER_POINTER_OBJECT\(\(void \*\)z\) is assignable: SUCCESS$
1414
^EXIT=10$
1515
^SIGNAL=0$
1616
^VERIFICATION FAILED$
@@ -19,7 +19,7 @@ main.c
1919
^\[foo.assigns.\d+\] line \d+ Check that \*q is assignable: FAILURE$
2020
^\[foo.assigns.\d+\] line \d+ Check that \*w is assignable: FAILURE$
2121
^\[foo.assigns.\d+\] line \d+ Check that \*x is assignable: FAILURE$
22-
^\[foo.assigns.\d+\] line \d+ Check that POINTER_OBJECT\(\(void \*\)z\) is assignable: FAILURE$
22+
^\[foo.assigns.\d+\] line \d+ Check that __CPROVER_POINTER_OBJECT\(\(void \*\)z\) is assignable: FAILURE$
2323
--
2424
Checks that invalidated CARs are correctly tracked on `free` and `DEAD`.
2525

regression/contracts/assigns_enforce_havoc_object/test.desc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ main.c
44
^EXIT=10$
55
^SIGNAL=0$
66
^\[foo.assigns.\d+\] line \d+ Check that __CPROVER_object_whole\(\(.*\)a1->u.b->c\) is valid: SUCCESS$
7-
^\[bar.assigns.\d+\] line \d+ Check that POINTER_OBJECT\(\(void \*\)a->u\.b->c\) is assignable: SUCCESS$
8-
^\[bar.assigns.\d+\] line \d+ Check that POINTER_OBJECT\(\(void \*\)a->u\.b->c\) is assignable: FAILURE$
7+
^\[bar.assigns.\d+\] line \d+ Check that __CPROVER_POINTER_OBJECT\(\(void \*\)a->u\.b->c\) is assignable: SUCCESS$
8+
^\[bar.assigns.\d+\] line \d+ Check that __CPROVER_POINTER_OBJECT\(\(void \*\)a->u\.b->c\) is assignable: FAILURE$
99
^VERIFICATION FAILED$
1010
--
1111
--
12-
Checks that __CPROVER_havoc_object(x) is detected as a write to POINTER_OBJECT(x).
12+
Checks that __CPROVER_havoc_object(x) is detected as a write to __CPROVER_POINTER_OBJECT(x).

src/ansi-c/expr2c.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4012,9 +4012,10 @@ optionalt<std::string> expr2ct::convert_function(const exprt &src)
40124012
{ID_isinf, "isinf"},
40134013
{ID_isnan, "isnan"},
40144014
{ID_isnormal, "isnormal"},
4015-
{ID_object_size, "OBJECT_SIZE"},
4016-
{ID_pointer_object, "POINTER_OBJECT"},
4017-
{ID_pointer_offset, "POINTER_OFFSET"},
4015+
{ID_object_size, CPROVER_PREFIX "OBJECT_SIZE"},
4016+
{ID_pointer_object, CPROVER_PREFIX "POINTER_OBJECT"},
4017+
{ID_pointer_offset, CPROVER_PREFIX "POINTER_OFFSET"},
4018+
{ID_loop_entry, CPROVER_PREFIX "loop_entry"},
40184019
{ID_saturating_minus, CPROVER_PREFIX "saturating_minus"},
40194020
{ID_saturating_plus, CPROVER_PREFIX "saturating_plus"},
40204021
{ID_r_ok, "R_OK"},

0 commit comments

Comments
 (0)