File tree Expand file tree Collapse file tree 4 files changed +223
-194
lines changed
analyses/variable-sensitivity Expand file tree Collapse file tree 4 files changed +223
-194
lines changed Original file line number Diff line number Diff line change 10
10
#include < analyses/variable-sensitivity/abstract_object_statistics.h>
11
11
#include < analyses/variable-sensitivity/variable_sensitivity_object_factory.h>
12
12
#include < util/expr_util.h>
13
+ #include < util/mathematical_types.h>
13
14
#include < util/simplify_expr.h>
14
15
#include < util/simplify_expr_class.h>
15
16
@@ -851,7 +852,27 @@ class simplify_vsd_exprt : public simplify_exprt
851
852
public:
852
853
explicit simplify_vsd_exprt (const namespacet &_ns) : simplify_exprt(_ns)
853
854
{
854
- vsd_pointers = true ;
855
+ }
856
+
857
+ NODISCARD resultt<> simplify_node (exprt expr) override
858
+ {
859
+ if (expr.id () == ID_plus)
860
+ return vsd_simplify_plus (to_plus_expr (expr));
861
+ return simplify_exprt::simplify_node (expr);
862
+ }
863
+
864
+ private:
865
+ resultt<> vsd_simplify_plus (const plus_exprt &expr)
866
+ {
867
+ // (T*)p+a - don't simplify any further
868
+ if (
869
+ expr.type ().id () == ID_pointer && expr.operands ().size () == 2 &&
870
+ is_number (expr.op1 ().type ()))
871
+ {
872
+ return unchanged (expr);
873
+ }
874
+
875
+ return simplify_exprt::simplify_plus (expr);
855
876
}
856
877
};
857
878
Original file line number Diff line number Diff line change @@ -87,6 +87,7 @@ abstract_object_pointert context_abstract_objectt::expression_transform(
87
87
const namespacet &ns) const
88
88
{
89
89
PRECONDITION (expr.operands ().size () == operands.size ());
90
+
90
91
std::vector<abstract_object_pointert> child_operands;
91
92
92
93
std::transform (
Original file line number Diff line number Diff line change @@ -73,13 +73,11 @@ class with_exprt;
73
73
class simplify_exprt
74
74
{
75
75
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)
80
79
#ifdef DEBUG_ON_DEMAND
81
- ,
82
- debug_on (false )
80
+ , debug_on(false )
83
81
#endif
84
82
{
85
83
#ifdef DEBUG_ON_DEMAND
@@ -248,8 +246,6 @@ class simplify_exprt
248
246
249
247
protected:
250
248
const namespacet &ns;
251
- bool vsd_pointers;
252
-
253
249
#ifdef DEBUG_ON_DEMAND
254
250
bool debug_on;
255
251
#endif
You can’t perform that action at this time.
0 commit comments