@@ -26,7 +26,7 @@ Author: Daniel Kroening, kroening@kroening.com
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