|
26 | 26 |
|
27 | 27 | #include <analyses/dirty.h>
|
28 | 28 |
|
29 |
| -static void get_l1_name(exprt &expr); |
| 29 | +static level1t<exprt> get_l1_name(exprt expr); |
30 | 30 |
|
31 | 31 | goto_symex_statet::goto_symex_statet(const symex_targett::sourcet &_source)
|
32 | 32 | : goto_statet(_source), symex_target(nullptr), record_events(true), dirty()
|
@@ -210,18 +210,19 @@ void goto_symex_statet::assignment(
|
210 | 210 |
|
211 | 211 | {
|
212 | 212 | // update value sets
|
213 |
| - exprt l1_rhs(rhs); |
214 |
| - get_l1_name(l1_rhs); |
| 213 | + level1t<exprt> l1_rhs = get_l1_name(rhs); |
215 | 214 | level1t<ssa_exprt> l1_lhs = remove_level2(lhs);
|
216 | 215 |
|
217 | 216 | if(run_validation_checks)
|
218 | 217 | {
|
219 | 218 | DATA_INVARIANT(
|
220 | 219 | !check_renaming_l1(l1_lhs.expr), "lhs renaming failed on l1");
|
221 |
| - DATA_INVARIANT(!check_renaming_l1(l1_rhs), "rhs renaming failed on l1"); |
| 220 | + DATA_INVARIANT( |
| 221 | + !check_renaming_l1(l1_rhs.expr), "rhs renaming failed on l1"); |
222 | 222 | }
|
223 | 223 |
|
224 |
| - value_set.assign(l1_lhs.expr, l1_rhs, ns, rhs_is_simplified, is_shared); |
| 224 | + value_set.assign( |
| 225 | + l1_lhs.expr, l1_rhs.expr, ns, rhs_is_simplified, is_shared); |
225 | 226 | }
|
226 | 227 |
|
227 | 228 | #if 0
|
@@ -742,16 +743,14 @@ void goto_symex_statet::rename(
|
742 | 743 | l1_type_entry.first->second=type;
|
743 | 744 | }
|
744 | 745 |
|
745 |
| -static void get_l1_name(exprt &expr) |
| 746 | +static level1t<exprt> get_l1_name(exprt expr) |
746 | 747 | {
|
747 | 748 | // do not reset the type !
|
748 |
| - |
749 |
| - if(expr.id()==ID_symbol && |
750 |
| - expr.get_bool(ID_C_SSA_symbol)) |
751 |
| - to_ssa_expr(expr).remove_level_2(); |
752 |
| - else |
753 |
| - Forall_operands(it, expr) |
754 |
| - get_l1_name(*it); |
| 749 | + if(auto ssa = expr_try_dynamic_cast<ssa_exprt>(expr)) |
| 750 | + return level1t<exprt>{remove_level2(std::move(*ssa)).expr}; |
| 751 | + Forall_operands(it, expr) |
| 752 | + *it = get_l1_name(std::move(*it)).expr; |
| 753 | + return level1t<exprt>{expr}; |
755 | 754 | }
|
756 | 755 |
|
757 | 756 | /// Dumps the current state of symex, printing the function name and location
|
|
0 commit comments