@@ -280,14 +280,12 @@ static void set_l2_indices(
280
280
ssa_expr.set_level_2 (level2.current_count (ssa_expr.get_identifier ()));
281
281
}
282
282
283
- void goto_symex_statet::rename_level0 (exprt & expr, const namespacet &ns)
283
+ exprt goto_symex_statet::rename_level0 (exprt expr, const namespacet &ns)
284
284
{
285
285
// rename all the symbols with their last known value
286
286
if (auto ssa = expr_try_dynamic_cast<ssa_exprt>(expr))
287
287
{
288
- set_l0_indices (level0, *ssa, source.thread_nr , ns);
289
- rename (expr.type (), ssa->get_identifier (), ns, L0);
290
- ssa->update_type ();
288
+ return rename_level0 (*ssa, ns);
291
289
}
292
290
else if (expr.id () == ID_symbol)
293
291
{
@@ -296,16 +294,17 @@ void goto_symex_statet::rename_level0(exprt &expr, const namespacet &ns)
296
294
{
297
295
rename (expr.type (), to_symbol_expr (expr).get_identifier (), ns, L0);
298
296
299
- return ;
297
+ return expr ;
300
298
}
301
299
302
300
expr = ssa_exprt (expr);
303
- rename_level0 (expr, ns);
301
+ return rename_level0 (expr, ns);
304
302
}
305
303
else if (auto address_of_expr = expr_try_dynamic_cast<address_of_exprt>(expr))
306
304
{
307
305
rename_address (address_of_expr->object (), ns, L0);
308
306
to_pointer_type (expr.type ()).subtype () = address_of_expr->object ().type ();
307
+ return expr;
309
308
}
310
309
else
311
310
{
@@ -317,9 +316,20 @@ void goto_symex_statet::rename_level0(exprt &expr, const namespacet &ns)
317
316
rename_level0 (op, ns);
318
317
319
318
fix_type (expr);
319
+ return expr;
320
320
}
321
321
}
322
322
323
+ ssa_exprt
324
+ goto_symex_statet::rename_level0 (const symbol_exprt &expr, const namespacet &ns)
325
+ {
326
+ ssa_exprt ssa{expr};
327
+ set_l0_indices (level0, ssa, source.thread_nr , ns);
328
+ rename (ssa.type (), ssa.get_identifier (), ns, L0);
329
+ ssa.update_type ();
330
+ return ssa;
331
+ }
332
+
323
333
void goto_symex_statet::rename_level1 (exprt &expr, const namespacet &ns)
324
334
{
325
335
// rename all the symbols with their last known value
@@ -612,10 +622,9 @@ void goto_symex_statet::rename_address(
612
622
const namespacet &ns,
613
623
levelt level)
614
624
{
625
+ PRECONDITION (level != L0);
615
626
auto rename_expr = [&](exprt &e) {
616
- if (level == L0)
617
- rename_level0 (e, ns);
618
- else if (level == L1)
627
+ if (level == L1)
619
628
rename_level1 (e, ns);
620
629
else
621
630
rename_level2 (e, ns);
@@ -718,8 +727,8 @@ void goto_symex_statet::rename(
718
727
{
719
728
auto rename_expr = [&](exprt &e) {
720
729
if (level == L0)
721
- rename_level0 (e , ns);
722
- else if (level == L1)
730
+ e = rename_level0 (std::move (e) , ns);
731
+ if (level == L1)
723
732
rename_level1 (e, ns);
724
733
else
725
734
rename_level2 (e, ns);
0 commit comments