@@ -209,26 +209,36 @@ void axiomst::node(const exprt &src, decision_proceduret &dest)
209
209
const auto &pointer = ok_expr.op1 ();
210
210
const auto &size = ok_expr.op2 ();
211
211
212
- // X_ok(p, s)
213
- // --> live_object(p) ∧ offset(p)≥0 ∧ offset(p)+s≤object_size(p)
214
- auto live_object =
215
- binary_predicate_exprt (state, ID_state_live_object, pointer);
216
- auto ssize_type = signed_size_type ();
217
- auto offset = pointer_offset_exprt (pointer, ssize_type);
218
- auto offset_simplified =
219
- simplify_state_expr_node (offset, address_taken, ns);
220
- auto lower = binary_relation_exprt (
221
- offset_simplified, ID_ge, from_integer (0 , ssize_type));
222
- auto object_size =
223
- binary_exprt (state, ID_state_object_size, pointer, ssize_type);
224
- auto size_casted = typecast_exprt::conditional_cast (size, ssize_type);
225
- auto upper = binary_relation_exprt (
226
- plus_exprt (offset_simplified, size_casted), ID_le, object_size);
227
-
228
- auto instance =
229
- replace (implies_exprt (src, and_exprt (live_object, lower, upper)));
230
- std::cout << " AXIOMd: " << format (instance) << " \n " ;
231
- dest << instance;
212
+ {
213
+ // X_ok(p, s)
214
+ // --> live_object(p) ∧ offset(p)≥0 ∧ offset(p)+s≤object_size(p)
215
+ auto live_object =
216
+ binary_predicate_exprt (state, ID_state_live_object, pointer);
217
+ auto ssize_type = signed_size_type ();
218
+ auto offset = pointer_offset_exprt (pointer, ssize_type);
219
+ auto offset_simplified =
220
+ simplify_state_expr_node (offset, address_taken, ns);
221
+ auto lower = binary_relation_exprt (
222
+ offset_simplified, ID_ge, from_integer (0 , ssize_type));
223
+ auto object_size =
224
+ binary_exprt (state, ID_state_object_size, pointer, ssize_type);
225
+ auto size_casted = typecast_exprt::conditional_cast (size, ssize_type);
226
+ auto upper = binary_relation_exprt (
227
+ plus_exprt (offset_simplified, size_casted), ID_le, object_size);
228
+
229
+ auto instance =
230
+ replace (implies_exprt (src, and_exprt (live_object, lower, upper)));
231
+ std::cout << " AXIOMd: " << format (instance) << " \n " ;
232
+ dest << instance;
233
+ }
234
+
235
+ {
236
+ // X_ok(ς, p) --> p!=0
237
+ auto instance =
238
+ replace (implies_exprt (src, not_exprt (null_pointer (pointer))));
239
+ std::cout << " AXIOMe: " << format (instance) << " \n " ;
240
+ dest << instance;
241
+ }
232
242
}
233
243
}
234
244
0 commit comments