@@ -237,7 +237,9 @@ void goto_symex_statet::set_l0_indices(
237237 ssa_exprt &ssa_expr,
238238 const namespacet &ns)
239239{
240- level0 (ssa_expr, ns, source.thread_nr );
240+ renamedt<ssa_exprt, L0> renamed =
241+ level0 (std::move (ssa_expr), ns, source.thread_nr );
242+ ssa_expr = renamed.get ();
241243}
242244
243245void goto_symex_statet::set_l1_indices (
@@ -248,8 +250,9 @@ void goto_symex_statet::set_l1_indices(
248250 return ;
249251 if (!ssa_expr.get_level_1 ().empty ())
250252 return ;
251- level0 (ssa_expr, ns, source.thread_nr );
252- level1 (ssa_expr);
253+ renamedt<ssa_exprt, L1> l1 =
254+ level1 (level0 (std::move (ssa_expr), ns, source.thread_nr ));
255+ ssa_expr = l1.get ();
253256}
254257
255258void goto_symex_statet::set_l2_indices (
@@ -258,12 +261,12 @@ void goto_symex_statet::set_l2_indices(
258261{
259262 if (!ssa_expr.get_level_2 ().empty ())
260263 return ;
261- level0 (ssa_expr, ns, source. thread_nr );
262- level1 (ssa_expr);
263- ssa_expr. set_level_2 (level2. current_count (ssa_expr. get_identifier ()) );
264+ renamedt<ssa_exprt, L2> l2 =
265+ level2 ( level1 (level0 ( std::move ( ssa_expr), ns, source. thread_nr )) );
266+ ssa_expr = l2. get ( );
264267}
265268
266- template <goto_symex_statet:: levelt level>
269+ template <levelt level>
267270ssa_exprt goto_symex_statet::rename_ssa (ssa_exprt ssa, const namespacet &ns)
268271{
269272 static_assert (
@@ -282,11 +285,12 @@ ssa_exprt goto_symex_statet::rename_ssa(ssa_exprt ssa, const namespacet &ns)
282285}
283286
284287// / Ensure `rename_ssa` gets compiled for L0
285- template ssa_exprt goto_symex_statet::rename_ssa<goto_symex_statet::L0>(
286- ssa_exprt ssa,
287- const namespacet &ns);
288+ template ssa_exprt
289+ goto_symex_statet::rename_ssa<L0>(ssa_exprt ssa, const namespacet &ns);
290+ template ssa_exprt
291+ goto_symex_statet::rename_ssa<L1>(ssa_exprt ssa, const namespacet &ns);
288292
289- template <goto_symex_statet:: levelt level>
293+ template <levelt level>
290294exprt goto_symex_statet::rename (exprt expr, const namespacet &ns)
291295{
292296 // rename all the symbols with their last known value
@@ -367,6 +371,8 @@ exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
367371 return expr;
368372}
369373
374+ template exprt goto_symex_statet::rename<L1>(exprt expr, const namespacet &ns);
375+
370376// / thread encoding
371377bool goto_symex_statet::l2_thread_read_encoding (
372378 ssa_exprt &expr,
@@ -544,7 +550,7 @@ bool goto_symex_statet::l2_thread_write_encoding(
544550 return threads.size ()>1 ;
545551}
546552
547- template <goto_symex_statet:: levelt level>
553+ template <levelt level>
548554void goto_symex_statet::rename_address (exprt &expr, const namespacet &ns)
549555{
550556 if (expr.id ()==ID_symbol &&
@@ -669,7 +675,7 @@ static bool requires_renaming(const typet &type, const namespacet &ns)
669675 return false ;
670676}
671677
672- template <goto_symex_statet:: levelt level>
678+ template <levelt level>
673679void goto_symex_statet::rename (
674680 typet &type,
675681 const irep_idt &l1_identifier,
0 commit comments