@@ -12,9 +12,9 @@ Author: Michael Tautschnig
1212#include < util/byte_operators.h>
1313#include < util/c_types.h>
1414#include < util/pointer_offset_size.h>
15- #include < util/simplify_expr.h>
1615
1716#include " goto_symex_state.h"
17+ #include " simplify_expr_with_value_set.h"
1818#include " symex_target.h"
1919
2020#define ENABLE_ARRAY_FIELD_SENSITIVITY
@@ -51,14 +51,14 @@ exprt field_sensitivityt::apply(
5151 !write && expr.id () == ID_member &&
5252 to_member_expr (expr).struct_op ().id () == ID_struct)
5353 {
54- return simplify_opt (std::move (expr), ns);
54+ return simplify_opt (std::move (expr), state. value_set , ns);
5555 }
5656#ifdef ENABLE_ARRAY_FIELD_SENSITIVITY
5757 else if (
5858 !write && expr.id () == ID_index &&
5959 to_index_expr (expr).array ().id () == ID_array)
6060 {
61- return simplify_opt (std::move (expr), ns);
61+ return simplify_opt (std::move (expr), state. value_set , ns);
6262 }
6363#endif // ENABLE_ARRAY_FIELD_SENSITIVITY
6464 else if (expr.id () == ID_member)
@@ -151,7 +151,10 @@ exprt field_sensitivityt::apply(
151151 // than only the full array
152152 index_exprt &index = to_index_expr (expr);
153153 if (should_simplify)
154- simplify (index.index (), ns);
154+ {
155+ simplify_expr_with_value_sett{state.value_set , language_mode, ns}
156+ .simplify (index.index ());
157+ }
155158
156159 if (
157160 is_ssa_expr (index.array ()) && index.array ().type ().id () == ID_array &&
@@ -160,9 +163,12 @@ exprt field_sensitivityt::apply(
160163 // place the entire index expression, not just the array operand, in an
161164 // SSA expression
162165 ssa_exprt tmp = to_ssa_expr (index.array ());
163- auto l2_index = state.rename (index.index (), ns);
166+ auto l2_index = state.rename (index.index (), ns). get () ;
164167 if (should_simplify)
165- l2_index.simplify (ns);
168+ {
169+ simplify_expr_with_value_sett{state.value_set , language_mode, ns}
170+ .simplify (l2_index);
171+ }
166172 bool was_l2 = !tmp.get_level_2 ().empty ();
167173 exprt l2_size =
168174 state.rename (to_array_type (index.array ().type ()).size (), ns).get ();
@@ -181,14 +187,14 @@ exprt field_sensitivityt::apply(
181187 numeric_cast_v<mp_integer>(to_constant_expr (l2_size)) <=
182188 max_field_sensitivity_array_size)
183189 {
184- if (l2_index.get (). is_constant ())
190+ if (l2_index.is_constant ())
185191 {
186192 // place the entire index expression, not just the array operand,
187193 // in an SSA expression
188194 ssa_exprt ssa_array = to_ssa_expr (index.array ());
189195 ssa_array.remove_level_2 ();
190196 index.array () = ssa_array.get_original_expr ();
191- index.index () = l2_index. get () ;
197+ index.index () = l2_index;
192198 tmp.set_expression (index);
193199 if (was_l2)
194200 {
@@ -393,7 +399,10 @@ void field_sensitivityt::field_assignments_rec(
393399 const exprt member_rhs = apply (
394400 ns,
395401 state,
396- simplify_opt (member_exprt{ssa_rhs, comp.get_name (), comp.type ()}, ns),
402+ simplify_opt (
403+ member_exprt{ssa_rhs, comp.get_name (), comp.type ()},
404+ state.value_set ,
405+ ns),
397406 false );
398407
399408 const exprt &member_lhs = *fs_it;
@@ -437,6 +446,7 @@ void field_sensitivityt::field_assignments_rec(
437446 simplify_opt (
438447 make_byte_extract (
439448 ssa_rhs, from_integer (0 , c_index_type ()), comp.type ()),
449+ state.value_set ,
440450 ns),
441451 false );
442452
@@ -476,7 +486,9 @@ void field_sensitivityt::field_assignments_rec(
476486 ns,
477487 state,
478488 simplify_opt (
479- index_exprt{ssa_rhs, from_integer (i, type->index_type ())}, ns),
489+ index_exprt{ssa_rhs, from_integer (i, type->index_type ())},
490+ state.value_set ,
491+ ns),
480492 false );
481493
482494 const exprt &index_lhs = *fs_it;
@@ -558,10 +570,14 @@ bool field_sensitivityt::is_divisible(
558570 return false ;
559571}
560572
561- exprt field_sensitivityt::simplify_opt (exprt e, const namespacet &ns) const
573+ exprt field_sensitivityt::simplify_opt (
574+ exprt e,
575+ const value_sett &value_set,
576+ const namespacet &ns) const
562577{
563578 if (!should_simplify)
564579 return e;
565580
566- return simplify_expr (std::move (e), ns);
581+ simplify_expr_with_value_sett{value_set, language_mode, ns}.simplify (e);
582+ return e;
567583}
0 commit comments