Skip to content

Commit 3140a77

Browse files
committed
Make CPROVER intrinsics proper prototypes
Forward declarations without arguments are deprecated in C. Polymorphic built-ins now have dummy declarations that are only in effect when running library checks. Our own C front-end will type check them properly and won't rely on forward declarations.
1 parent 0bb7a04 commit 3140a77

File tree

47 files changed

+224
-245
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+224
-245
lines changed

doc/cprover-manual/api.md

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -191,11 +191,8 @@ option to verify the preconditions of the primitives.
191191
```C
192192
__CPROVER_size_t __CPROVER_OBJECT_SIZE(const void *p);
193193
_Bool __CPROVER_DYNAMIC_OBJECT(const void *p);
194-
void __CPROVER_r_ok(const T *p);
195194
void __CPROVER_r_ok(const void *p, size_t size);
196-
void __CPROVER_w_ok(const T *p);
197195
void __CPROVER_w_ok(const void *p, size_t size);
198-
void __CPROVER_rw_ok(const T *p);
199196
void __CPROVER_rw_ok(const void *p, size_t size);
200197
```
201198

@@ -207,9 +204,7 @@ object.
207204
The function **\_\_CPROVER\_r_ok** returns true if reading the piece of
208205
memory starting at the given pointer with the given size is safe.
209206
**\_\_CPROVER\_w_ok** does the same with writing, and **\_\_CPROVER\_rw_ok**
210-
returns true when it is safe to do both. These predicates can be given an
211-
optional size; when the size argument is not given, the size of the subtype
212-
(which must not be **void**) of the pointer type is used.
207+
returns true when it is safe to do both.
213208

214209
#### \_\_CPROVER\_havoc\_object
215210

regression/cbmc/pointer-predicates/at_bounds1.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ int main()
99
if(p != NULL && s != __CPROVER_max_malloc_size)
1010
{
1111
char *q = p + s;
12-
__CPROVER_assert(__CPROVER_r_ok(q, 0), "should be valid");
13-
__CPROVER_assert(!__CPROVER_r_ok(q + 1, 0), "should fail");
12+
__CPROVER_assert(__CPROVER_r_ok(q, 0ull), "should be valid");
13+
__CPROVER_assert(!__CPROVER_r_ok(q + 1, 0ull), "should fail");
1414
}
1515
}

regression/cbmc/pointer-predicates/at_bounds1.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
CORE broken-smt-backend new-smt-backend
22
at_bounds1.c
33
--pointer-primitive-check --malloc-fail-null
4-
^\[main.pointer_primitives.\d+\] line 13 pointer outside object bounds in R_OK\(q \+ (\(signed (long (long )?)?int\))?1, (\(unsigned (long (long )?)?int\))?0\): FAILURE$
4+
^\[main.pointer_primitives.\d+\] line 13 pointer outside object bounds in R_OK\(\(const void \*\)\(q \+ (\(signed (long (long )?)?int\))?1\), 0ull\): FAILURE$
55
^\*\* 1 of \d+ failed
66
^VERIFICATION FAILED$
77
^EXIT=10$

regression/cbmc/pointer-primitive-check-01/main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ void main()
1818
__CPROVER_OBJECT_SIZE(p4);
1919

2020
char *p5;
21-
__CPROVER_r_ok(p5, 1);
21+
__CPROVER_r_ok(p5, 1ull);
2222

2323
char *p6;
24-
__CPROVER_w_ok(p6, 1);
24+
__CPROVER_w_ok(p6, 1ull);
2525

2626
char *p7;
2727
__CPROVER_DYNAMIC_OBJECT(p7);

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@ main.c
77
\[main.pointer_primitives.\d+\] line \d+ deallocated dynamic object in __CPROVER_OBJECT_SIZE\(\(const void \*\)p4\): SUCCESS
88
\[main.pointer_primitives.\d+\] line \d+ dead object in __CPROVER_OBJECT_SIZE\(\(const void \*\)p4\): SUCCESS
99
\[main.pointer_primitives.\d+\] line \d+ pointer outside object bounds in __CPROVER_OBJECT_SIZE\(\(const void \*\)p4\): FAILURE
10-
\[main.pointer_primitives.\d+\] line \d+ pointer invalid in R_OK\(p5, .*1\): FAILURE
11-
\[main.pointer_primitives.\d+\] line \d+ deallocated dynamic object in R_OK\(p5, .*1\): SUCCESS
12-
\[main.pointer_primitives.\d+\] line \d+ dead object in R_OK\(p5, .*1\): SUCCESS
13-
\[main.pointer_primitives.\d+\] line \d+ pointer outside object bounds in R_OK\(p5, .*1\): FAILURE
14-
\[main.pointer_primitives.\d+\] line \d+ pointer invalid in W_OK\(p6, \(.*\)1\): FAILURE
15-
\[main.pointer_primitives.\d+\] line \d+ deallocated dynamic object in W_OK\(p6, .*1\): SUCCESS
16-
\[main.pointer_primitives.\d+\] line \d+ dead object in W_OK\(p6, .*1\): SUCCESS
17-
\[main.pointer_primitives.\d+\] line \d+ pointer outside object bounds in W_OK\(p6, .*1\): FAILURE
10+
\[main.pointer_primitives.\d+\] line \d+ pointer invalid in R_OK\(\(const void \*\)p5, 1ull\): FAILURE
11+
\[main.pointer_primitives.\d+\] line \d+ deallocated dynamic object in R_OK\(\(const void \*\)p5, 1ull\): SUCCESS
12+
\[main.pointer_primitives.\d+\] line \d+ dead object in R_OK\(\(const void \*\)p5, 1ull\): SUCCESS
13+
\[main.pointer_primitives.\d+\] line \d+ pointer outside object bounds in R_OK\(\(const void \*\)p5, 1ull\): FAILURE
14+
\[main.pointer_primitives.\d+\] line \d+ pointer invalid in W_OK\(\(const void \*\)p6, 1ull\): FAILURE
15+
\[main.pointer_primitives.\d+\] line \d+ deallocated dynamic object in W_OK\(\(const void \*\)p6, 1ull\): SUCCESS
16+
\[main.pointer_primitives.\d+\] line \d+ dead object in W_OK\(\(const void \*\)p6, 1ull\): SUCCESS
17+
\[main.pointer_primitives.\d+\] line \d+ pointer outside object bounds in W_OK\(\(const void \*\)p6, 1ull\): FAILURE
1818
\[main.pointer_primitives.\d+\] line \d+ pointer invalid in IS_DYNAMIC_OBJECT\(\(const void \*\)p7\): FAILURE
1919
\[main.pointer_primitives.\d+\] line \d+ deallocated dynamic object in IS_DYNAMIC_OBJECT\(\(const void \*\)p7\): SUCCESS
2020
\[main.pointer_primitives.\d+\] line \d+ dead object in IS_DYNAMIC_OBJECT\(\(const void \*\)p7\): SUCCESS

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

Lines changed: 4 additions & 4 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.1\] line \d+ pointer invalid in R_OK\(p, .*1\): FAILURE
7-
\[main.pointer_primitives.2\] line \d+ deallocated dynamic object in R_OK\(p, .*1\): SUCCESS
8-
\[main.pointer_primitives.3\] line \d+ dead object in R_OK\(p, .*1\): SUCCESS
9-
\[main.pointer_primitives.4\] line \d+ pointer outside object bounds in R_OK\(p, .*1\): FAILURE
6+
\[main.pointer_primitives.1\] line \d+ pointer invalid in R_OK\(\(const void \*\)p, .*1\): FAILURE
7+
\[main.pointer_primitives.2\] line \d+ deallocated dynamic object in R_OK\(\(const void \*\)p, .*1\): SUCCESS
8+
\[main.pointer_primitives.3\] line \d+ dead object in R_OK\(\(const void \*\)p, .*1\): SUCCESS
9+
\[main.pointer_primitives.4\] line \d+ pointer outside object bounds in R_OK\(\(const void \*\)p, .*1\): FAILURE
1010
--
1111
^warning: ignoring
1212
--

regression/cbmc/pragma_cprover3/main.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ int main()
2020
}
2121

2222
// generate check and fail on the following statements
23-
if(__CPROVER_r_ok(q, 1))
23+
if(__CPROVER_r_ok(q, 1ull))
2424
{
2525
}
2626
}

regression/cbmc/pragma_cprover3/test.desc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ CORE new-smt-backend
22
main.c
33
--pointer-primitive-check
44
^main.c function main$
5-
^\[main.pointer_primitives.\d+\] line 23 pointer invalid in R_OK\(q, \(unsigned (long (long )?)?int\)1\): FAILURE$
6-
^\[main.pointer_primitives.\d+\] line 23 pointer outside object bounds in R_OK\(q, \(unsigned (long (long )?)?int\)1\): FAILURE$
5+
^\[main.pointer_primitives.\d+\] line 23 pointer invalid in R_OK\(\(const void \*\)q, 1ull\): FAILURE$
6+
^\[main.pointer_primitives.\d+\] line 23 pointer outside object bounds in R_OK\(\(const void \*\)q, 1ull\): FAILURE$
77
^VERIFICATION FAILED$
88
^EXIT=10$
99
^SIGNAL=0$

regression/cbmc/pragma_cprover_enable3/main.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ int main()
55
#pragma CPROVER check push
66
#pragma CPROVER check enable "pointer-primitive"
77
// generate checks for the following statements and fail
8-
if(__CPROVER_r_ok(p, 1))
8+
if(__CPROVER_r_ok(p, 1ull))
99
{
1010
}
1111
#pragma CPROVER check pop
1212

1313
// but do not generate checks on the following statements
14-
if(__CPROVER_r_ok(q, 1))
14+
if(__CPROVER_r_ok(q, 1ull))
1515
{
1616
}
1717
}

regression/cbmc/pragma_cprover_enable3/test.desc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ CORE new-smt-backend
22
main.c
33

44
^main.c function main$
5-
^\[main.pointer_primitives.\d+\] line 8 pointer invalid in R_OK\(p, \(unsigned (long (long )?)?int\)1\): FAILURE$
6-
^\[main.pointer_primitives.\d+\] line 8 pointer outside object bounds in R_OK\(p, \(unsigned (long (long )?)?int\)1\): FAILURE$
5+
^\[main.pointer_primitives.\d+\] line 8 pointer invalid in R_OK\(\(const void \*\)p, 1ull\): FAILURE$
6+
^\[main.pointer_primitives.\d+\] line 8 pointer outside object bounds in R_OK\(\(const void \*\)p, 1ull\): FAILURE$
77
^VERIFICATION FAILED$
88
^EXIT=10$
99
^SIGNAL=0$

0 commit comments

Comments
 (0)