Skip to content

Commit 5d8b939

Browse files
committed
Add expression lowering to {r,w,rw}_ok
This prepares removal of expression rewriting in the front-end.
1 parent 42c6982 commit 5d8b939

File tree

3 files changed

+20
-4
lines changed

3 files changed

+20
-4
lines changed

src/ansi-c/goto_check_c.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2032,7 +2032,7 @@ optionalt<exprt> goto_check_ct::expand_pointer_checks(exprt expr)
20322032
{
20332033
const auto &pointer_in_range_expr = to_pointer_in_range_expr(expr);
20342034

2035-
auto expanded = pointer_in_range_expr.lower();
2035+
auto expanded = pointer_in_range_expr.lower(ns);
20362036

20372037
// rec. call
20382038
auto expanded_rec_opt = expand_pointer_checks(expanded);

src/util/pointer_expr.cpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,18 @@ void dereference_exprt::validate(
227227
"operand");
228228
}
229229

230-
exprt pointer_in_range_exprt::lower() const
230+
exprt r_or_w_ok_exprt::lower(const namespacet &ns) const
231+
{
232+
return conjunction(
233+
{not_exprt{null_object(pointer())},
234+
not_exprt{is_invalid_pointer_exprt{pointer()}},
235+
not_exprt{same_object(pointer(), deallocated_ptr())},
236+
not_exprt{same_object(pointer(), dead_ptr())},
237+
not_exprt{object_lower_bound(pointer(), nil_exprt())},
238+
not_exprt{object_upper_bound(pointer(), size())}});
239+
}
240+
241+
exprt pointer_in_range_exprt::lower(const namespacet &ns) const
231242
{
232243
return and_exprt(
233244
{same_object(op0(), op1()),
@@ -236,7 +247,8 @@ exprt pointer_in_range_exprt::lower() const
236247
op0(),
237248
minus_exprt(pointer_offset(op2()), pointer_offset(op0())),
238249
deallocated_ptr(),
239-
dead_ptr()),
250+
dead_ptr())
251+
.lower(ns),
240252
binary_relation_exprt(pointer_offset(op0()), ID_le, pointer_offset(op1())),
241253
binary_relation_exprt(
242254
pointer_offset(op1()), ID_le, pointer_offset(op2()))});

src/util/pointer_expr.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,7 @@ class pointer_in_range_exprt : public expr_protectedt
418418
}
419419

420420
// translate into equivalent conjunction
421-
exprt lower() const;
421+
exprt lower(const namespacet &ns) const;
422422
};
423423

424424
template <>
@@ -869,6 +869,10 @@ class r_or_w_ok_exprt : public expr_protectedt
869869
{
870870
return op3();
871871
}
872+
873+
/// Lower an r_or_w_ok_exprt to arithmetic and logic expressions.
874+
/// \return Semantically equivalent expression
875+
exprt lower(const namespacet &ns) const;
872876
};
873877

874878
template <>

0 commit comments

Comments
 (0)