@@ -188,7 +188,8 @@ void goto_symex_statet::assignment(
188
188
const auto level2_it =
189
189
level2.current_names .emplace (l1_identifier, std::make_pair (lhs, 0 )).first ;
190
190
symex_renaming_levelt::increase_counter (level2_it);
191
- lhs = set_l2_indices (lhs, ns);
191
+ const renamedt<ssa_exprt, L2> l2_lhs = set_l2_indices (std::move (lhs), ns);
192
+ lhs = l2_lhs.get ();
192
193
193
194
// in case we happen to be multi-threaded, record the memory access
194
195
bool is_shared=l2_thread_write_encoding (lhs, ns);
@@ -247,12 +248,10 @@ goto_symex_statet::set_l1_indices(ssa_exprt ssa_expr, const namespacet &ns)
247
248
return level1 (level0 (std::move (ssa_expr), ns, source.thread_nr ));
248
249
}
249
250
250
- ssa_exprt
251
+ renamedt< ssa_exprt, L2>
251
252
goto_symex_statet::set_l2_indices (ssa_exprt ssa_expr, const namespacet &ns)
252
253
{
253
- renamedt<ssa_exprt, L2> l2 =
254
- level2 (level1 (level0 (std::move (ssa_expr), ns, source.thread_nr )));
255
- return l2.get ();
254
+ return level2 (level1 (level0 (std::move (ssa_expr), ns, source.thread_nr )));
256
255
}
257
256
258
257
template <levelt level>
@@ -327,7 +326,11 @@ exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
327
326
if (p_it != propagation.end ())
328
327
expr=p_it->second ; // already L2
329
328
else
330
- ssa = set_l2_indices (ssa, ns);
329
+ {
330
+ const renamedt<ssa_exprt, L2> l2_ssa =
331
+ set_l2_indices (std::move (ssa), ns);
332
+ ssa = l2_ssa.get ();
333
+ }
331
334
}
332
335
}
333
336
}
@@ -441,8 +444,7 @@ bool goto_symex_statet::l2_thread_read_encoding(
441
444
if (!no_write.op ().is_false ())
442
445
cond |= guardt{no_write.op ()};
443
446
444
- if_exprt tmp (cond.as_expr (), ssa_l1, ssa_l1);
445
- tmp.true_case () = set_l2_indices (to_ssa_expr (tmp.true_case ()), ns);
447
+ const renamedt<ssa_exprt, L2> l2_true_case = set_l2_indices (ssa_l1, ns);
446
448
447
449
if (a_s_read.second .empty ())
448
450
{
@@ -452,8 +454,9 @@ bool goto_symex_statet::l2_thread_read_encoding(
452
454
symex_renaming_levelt::increase_counter (level2_it);
453
455
a_s_read.first =level2.current_count (l1_identifier);
454
456
}
457
+ const renamedt<ssa_exprt, L2> l2_false_case = set_l2_indices (ssa_l1, ns);
455
458
456
- to_ssa_expr ( tmp. false_case ()). set_level_2 (a_s_read. first ) ;
459
+ if_exprt tmp{cond. as_expr (), l2_true_case. get (), l2_false_case. get ()} ;
457
460
458
461
if (cond.is_false ())
459
462
{
@@ -475,7 +478,9 @@ bool goto_symex_statet::l2_thread_read_encoding(
475
478
source,
476
479
symex_targett::assignment_typet::PHI);
477
480
478
- expr = set_l2_indices (ssa_l1, ns);
481
+ const renamedt<ssa_exprt, L2> ssa_l2 =
482
+ set_l2_indices (std::move (ssa_l1), ns);
483
+ expr = ssa_l2.get ();
479
484
480
485
a_s_read.second .push_back (guard);
481
486
if (!no_write.op ().is_false ())
@@ -491,13 +496,16 @@ bool goto_symex_statet::l2_thread_read_encoding(
491
496
// No event and no fresh index, but avoid constant propagation
492
497
if (!record_events)
493
498
{
494
- expr = set_l2_indices (ssa_l1, ns);
499
+ const renamedt<ssa_exprt, L2> ssa_l2 =
500
+ set_l2_indices (std::move (ssa_l1), ns);
501
+ expr = ssa_l2.get ();
495
502
return true ;
496
503
}
497
504
498
505
// produce a fresh L2 name
499
506
symex_renaming_levelt::increase_counter (level2_it);
500
- expr = set_l2_indices (ssa_l1, ns);
507
+ const renamedt<ssa_exprt, L2> ssa_l2 = set_l2_indices (std::move (ssa_l1), ns);
508
+ expr = ssa_l2.get ();
501
509
502
510
// and record that
503
511
INVARIANT_STRUCTURED (
0 commit comments