@@ -320,6 +320,45 @@ void goto_symex_statet::rename_level0(exprt &expr, const namespacet &ns)
320
320
}
321
321
}
322
322
323
+ void goto_symex_statet::rename_level1 (exprt &expr, const namespacet &ns)
324
+ {
325
+ // rename all the symbols with their last known value
326
+ if (auto ssa = expr_try_dynamic_cast<ssa_exprt>(expr))
327
+ {
328
+ set_l1_indices (level0, level1, *ssa, source.thread_nr , ns);
329
+ rename (expr.type (), ssa->get_identifier (), ns, L1);
330
+ ssa->update_type ();
331
+ }
332
+ else if (expr.id () == ID_symbol)
333
+ {
334
+ // we never rename function symbols
335
+ if (expr.type ().id () == ID_code)
336
+ {
337
+ rename (expr.type (), to_symbol_expr (expr).get_identifier (), ns, L1);
338
+ return ;
339
+ }
340
+
341
+ expr = ssa_exprt (expr);
342
+ rename_level1 (expr, ns);
343
+ }
344
+ else if (auto address_of_expr = expr_try_dynamic_cast<address_of_exprt>(expr))
345
+ {
346
+ rename_address (address_of_expr->object (), ns, L1);
347
+ to_pointer_type (expr.type ()).subtype () = address_of_expr->object ().type ();
348
+ }
349
+ else
350
+ {
351
+ // this could go wrong, but we would have to re-typecheck ...
352
+ rename (expr.type (), irep_idt (), ns, L1);
353
+
354
+ // do this recursively
355
+ for (auto &op : expr.operands ())
356
+ rename_level1 (op, ns);
357
+
358
+ fix_type (expr);
359
+ }
360
+ }
361
+
323
362
void goto_symex_statet::rename (
324
363
exprt &expr,
325
364
const namespacet &ns,
0 commit comments