Skip to content

Commit 4844d22

Browse files
committed
Unwind vsd customisation from simply_exprt.
We can pick up the special case for pointer addition in abstract_object::expression_transform.
1 parent 36dcc4a commit 4844d22

File tree

5 files changed

+212
-211
lines changed

5 files changed

+212
-211
lines changed

src/analyses/variable-sensitivity/abstract_environment.cpp

+1-16
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ abstract_environmentt::eval(const exprt &expr, const namespacet &ns) const
9494
return abstract_object_factory(expr.type(), ns, false, true);
9595

9696
// first try to canonicalise, including constant folding
97-
const exprt &simplified_expr = simplify_vsd_expr(expr, ns);
97+
const exprt &simplified_expr = simplify_expr(expr, ns);
9898

9999
const irep_idt simplified_id = simplified_expr.id();
100100
if(simplified_id == ID_symbol)
@@ -845,18 +845,3 @@ exprt assume_greater_than(
845845

846846
return assume_less_than(env, symmetric_expr, ns);
847847
}
848-
849-
class simplify_vsd_exprt : public simplify_exprt
850-
{
851-
public:
852-
explicit simplify_vsd_exprt(const namespacet &_ns) : simplify_exprt(_ns)
853-
{
854-
vsd_pointers = true;
855-
}
856-
};
857-
858-
exprt simplify_vsd_expr(exprt src, const namespacet &ns)
859-
{
860-
simplify_vsd_exprt(ns).simplify(src);
861-
return src;
862-
}

src/analyses/variable-sensitivity/abstract_object.cpp

+9-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
#include <analyses/variable-sensitivity/abstract_environment.h>
1212

13+
#include <util/mathematical_types.h>
1314
#include <util/simplify_expr.h>
1415
#include <util/std_expr.h>
1516

@@ -102,6 +103,12 @@ abstract_object_pointert abstract_objectt::abstract_object_meet_internal(
102103
return shared_from_this();
103104
}
104105

106+
static bool is_pointer_addition(const exprt &expr)
107+
{
108+
return (expr.id() == ID_plus) && (expr.type().id() == ID_pointer) &&
109+
(expr.operands().size() == 2) && is_number(expr.operands()[1].type());
110+
}
111+
105112
abstract_object_pointert abstract_objectt::expression_transform(
106113
const exprt &expr,
107114
const std::vector<abstract_object_pointert> &operands,
@@ -117,7 +124,8 @@ abstract_object_pointert abstract_objectt::expression_transform(
117124
op = const_op.is_nil() ? op : const_op;
118125
}
119126

120-
simplify_vsd_expr(copy, ns);
127+
if(!is_pointer_addition(copy))
128+
copy = simplify_expr(copy, ns);
121129

122130
for(const exprt &op : copy.operands())
123131
{

src/analyses/variable-sensitivity/value_set_pointer_abstract_object.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include <analyses/variable-sensitivity/value_set_pointer_abstract_object.h>
1515
#include <numeric>
1616
#include <util/pointer_expr.h>
17+
#include <util/simplify_expr.h>
1718

1819
#include "abstract_environment.h"
1920

@@ -179,7 +180,7 @@ exprt value_set_pointer_abstract_objectt::ptr_comparison_expr(
179180
{
180181
auto ops = std::vector<abstract_object_pointert>{lhsp, rhsp};
181182
auto comparison = lhsp->ptr_comparison_expr(expr, ops, environment, ns);
182-
auto result = simplify_vsd_expr(comparison, ns);
183+
auto result = simplify_expr(comparison, ns);
183184
comparisons.insert(result);
184185
}
185186
}

src/util/simplify_expr_class.h

+4-8
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,11 @@ class with_exprt;
7373
class simplify_exprt
7474
{
7575
public:
76-
explicit simplify_exprt(const namespacet &_ns)
77-
: do_simplify_if(true),
78-
ns(_ns),
79-
vsd_pointers(false)
76+
explicit simplify_exprt(const namespacet &_ns):
77+
do_simplify_if(true),
78+
ns(_ns)
8079
#ifdef DEBUG_ON_DEMAND
81-
,
82-
debug_on(false)
80+
, debug_on(false)
8381
#endif
8482
{
8583
#ifdef DEBUG_ON_DEMAND
@@ -248,8 +246,6 @@ class simplify_exprt
248246

249247
protected:
250248
const namespacet &ns;
251-
bool vsd_pointers;
252-
253249
#ifdef DEBUG_ON_DEMAND
254250
bool debug_on;
255251
#endif

0 commit comments

Comments
 (0)