@@ -6,21 +6,26 @@ void __CPROVER_precondition(__CPROVER_bool precondition, const char *description
6
6
void __CPROVER_postcondition (__CPROVER_bool assertion , const char * description );
7
7
void __CPROVER_havoc_object (void * );
8
8
void __CPROVER_havoc_slice (void * , __CPROVER_size_t );
9
- __CPROVER_bool __CPROVER_equal ();
9
+ #ifdef LIBRARY_CHECK
10
+ // __CPROVER_equal expects two arguments of the same type -- any type is
11
+ // permitted, unsigned long long is just used for the benefit of running syntax
12
+ // checks using system compilers
13
+ __CPROVER_bool __CPROVER_equal (unsigned long long , unsigned long long );
14
+ #endif
10
15
__CPROVER_bool __CPROVER_same_object (const void * , const void * );
11
16
__CPROVER_bool __CPROVER_is_invalid_pointer (const void * );
12
17
_Bool __CPROVER_is_zero_string (const void * );
13
18
__CPROVER_size_t __CPROVER_zero_string_length (const void * );
14
19
__CPROVER_size_t __CPROVER_buffer_size (const void * );
15
- __CPROVER_bool __CPROVER_r_ok ();
16
- __CPROVER_bool __CPROVER_w_ok ();
17
- __CPROVER_bool __CPROVER_rw_ok ();
20
+ __CPROVER_bool __CPROVER_r_ok (void * , __CPROVER_size_t );
21
+ __CPROVER_bool __CPROVER_w_ok (void * , __CPROVER_size_t );
22
+ __CPROVER_bool __CPROVER_rw_ok (void * , __CPROVER_size_t );
18
23
19
24
// experimental features for CHC encodings -- do not use
20
- __CPROVER_bool __CPROVER_is_list (); // a singly-linked null-terminated dynamically-allocated list
21
- __CPROVER_bool __CPROVER_is_dll ();
22
- __CPROVER_bool __CPROVER_is_cyclic_dll ();
23
- __CPROVER_bool __CPROVER_is_sentinel_dll ();
25
+ __CPROVER_bool __CPROVER_is_list (void * ); // a singly-linked null-terminated dynamically-allocated list
26
+ __CPROVER_bool __CPROVER_is_dll (void * );
27
+ __CPROVER_bool __CPROVER_is_cyclic_dll (void * );
28
+ __CPROVER_bool __CPROVER_is_sentinel_dll (void * );
24
29
__CPROVER_bool __CPROVER_is_cstring (const char * );
25
30
__CPROVER_size_t __CPROVER_cstrlen (const char * );
26
31
__CPROVER_bool __CPROVER_separate (const void * , const void * , ...);
@@ -41,8 +46,8 @@ void __CPROVER_output(const char *id, ...);
41
46
void __CPROVER_cover (__CPROVER_bool condition );
42
47
43
48
// concurrency-related
44
- void __CPROVER_atomic_begin ();
45
- void __CPROVER_atomic_end ();
49
+ void __CPROVER_atomic_begin (void );
50
+ void __CPROVER_atomic_end (void );
46
51
void __CPROVER_fence (const char * kind , ...);
47
52
48
53
// contract-related functions
@@ -130,15 +135,23 @@ void __CPROVER_k_induction_hint(unsigned min, unsigned max,
130
135
// format string-related
131
136
int __CPROVER_scanf (const char * , ...);
132
137
138
+ #ifdef LIBRARY_CHECK
139
+ // The following built-ins are type checked by our C front-end and do not
140
+ // require declarations. They work with any types as described below. unsigned
141
+ // long long is just used to enable checks using system compilers.
133
142
// detect overflow
134
- __CPROVER_bool __CPROVER_overflow_minus ();
135
- __CPROVER_bool __CPROVER_overflow_mult ();
136
- __CPROVER_bool __CPROVER_overflow_plus ();
137
- __CPROVER_bool __CPROVER_overflow_shl ();
138
- __CPROVER_bool __CPROVER_overflow_unary_minus ();
143
+ // the following expect two numeric arguments
144
+ __CPROVER_bool __CPROVER_overflow_minus (unsigned long long , unsigned long long );
145
+ __CPROVER_bool __CPROVER_overflow_mult (unsigned long long , unsigned long long );
146
+ __CPROVER_bool __CPROVER_overflow_plus (unsigned long long , unsigned long long );
147
+ __CPROVER_bool __CPROVER_overflow_shl (unsigned long long , unsigned long long );
148
+ // expects one numeric argument
149
+ __CPROVER_bool __CPROVER_overflow_unary_minus (unsigned long long );
139
150
140
151
// enumerations
141
- __CPROVER_bool __CPROVER_enum_is_in_range ();
152
+ // expects one enum-typed argument
153
+ __CPROVER_bool __CPROVER_enum_is_in_range (unsigned long long );
154
+ #endif
142
155
143
156
// contracts
144
157
void __CPROVER_assignable (void * ptr , __CPROVER_size_t size ,
0 commit comments