Skip to content

Commit e092e9f

Browse files
committed
Remove ptr_diff_exprt
Detect case by checking expr has ID_minus and the operands are both pointers.
1 parent 23fcdea commit e092e9f

File tree

4 files changed

+12
-23
lines changed

4 files changed

+12
-23
lines changed

src/analyses/variable-sensitivity/abstract_environment.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@ std::vector<abstract_object_pointert> eval_operands(
5454
const abstract_environmentt &env,
5555
const namespacet &ns);
5656

57+
static bool is_ptr_diff(const exprt& expr) {
58+
return (expr.id() == ID_minus) &&
59+
(expr.operands()[0].type().id() == ID_pointer) &&
60+
(expr.operands()[1].type().id() == ID_pointer);
61+
}
5762
exprt simplify_vsd_expr(exprt src, const namespacet &ns);
5863

5964
abstract_object_pointert
@@ -71,7 +76,7 @@ abstract_environmentt::eval(const exprt &expr, const namespacet &ns) const
7176

7277
if(
7378
simplified_id == ID_member || simplified_id == ID_index ||
74-
simplified_id == ID_dereference || simplified_id == ID_ptr_diff)
79+
simplified_id == ID_dereference || is_ptr_diff(simplified_expr))
7580
{
7681
auto access_expr = simplified_expr;
7782
auto target = eval(access_expr.operands()[0], ns);

src/analyses/variable-sensitivity/abstract_pointer_object.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@ abstract_pointer_objectt::abstract_pointer_objectt(
3737
PRECONDITION(e.type().id() == ID_pointer);
3838
}
3939

40+
static bool is_ptr_diff(const exprt& expr) {
41+
return (expr.id() == ID_minus) &&
42+
(expr.operands()[1].type().id() == ID_pointer);
43+
}
44+
4045
abstract_object_pointert abstract_pointer_objectt::expression_transform(
4146
const exprt &expr,
4247
const std::vector<abstract_object_pointert> &operands,
@@ -46,7 +51,7 @@ abstract_object_pointert abstract_pointer_objectt::expression_transform(
4651
if(expr.id() == ID_dereference)
4752
return read_dereference(environment, ns);
4853

49-
if(expr.id() == ID_ptr_diff)
54+
if(is_ptr_diff(expr))
5055
{
5156
auto &rhs = operands[1];
5257
if(same_target(rhs))

src/util/irep_ids.def

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -861,7 +861,6 @@ IREP_ID_TWO(vector_gt, vector->)
861861
IREP_ID_TWO(vector_lt, vector-<)
862862
IREP_ID_ONE(shuffle_vector)
863863
IREP_ID_ONE(count_trailing_zeros)
864-
IREP_ID_ONE(ptr_diff)
865864

866865
// Projects depending on this code base that wish to extend the list of
867866
// available ids should provide a file local_irep_ids.def in their source tree

src/util/std_expr.h

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -928,26 +928,6 @@ inline minus_exprt &to_minus_expr(exprt &expr)
928928
return ret;
929929
}
930930

931-
class ptr_diff_exprt : public expr_protectedt
932-
{
933-
private:
934-
ptr_diff_exprt(const minus_exprt &minus_expr)
935-
: expr_protectedt(ID_ptr_diff, minus_expr.type(), minus_expr.operands())
936-
{
937-
PRECONDITION(op0().type().id() == ID_pointer);
938-
PRECONDITION(op1().type().id() == ID_pointer);
939-
}
940-
941-
friend ptr_diff_exprt to_ptr_diff_expr(const minus_exprt &expr);
942-
};
943-
944-
inline ptr_diff_exprt to_ptr_diff_expr(const minus_exprt &expr)
945-
{
946-
PRECONDITION(expr.lhs().type().id() == ID_pointer);
947-
PRECONDITION(expr.rhs().type().id() == ID_pointer);
948-
return ptr_diff_exprt(expr);
949-
}
950-
951931
/// \brief Binary multiplication
952932
/// Associativity is not specified.
953933
class mult_exprt:public multi_ary_exprt

0 commit comments

Comments
 (0)