@@ -163,15 +163,16 @@ void goto_symex_statet::assignment(
163
163
bool allow_pointer_unsoundness)
164
164
{
165
165
// identifier should be l0 or l1, make sure it's l1
166
- lhs = rename_ssa<L1>(std::move (lhs), ns);
166
+ renamedt<ssa_exprt, L1> l1_lhs = rename_ssa<L1>(std::move (lhs), ns);
167
167
irep_idt l1_identifier=lhs.get_identifier ();
168
168
169
169
// the type might need renaming
170
- rename <L2>(lhs .type (), l1_identifier, ns);
171
- lhs .update_type ();
170
+ rename <L2>(l1_lhs. value .type (), l1_identifier, ns);
171
+ l1_lhs. value .update_type ();
172
172
if (run_validation_checks)
173
173
{
174
- DATA_INVARIANT (!check_renaming_l1 (lhs), " lhs renaming failed on l1" );
174
+ DATA_INVARIANT (
175
+ !check_renaming_l1 (l1_lhs.value ), " lhs renaming failed on l1" );
175
176
}
176
177
177
178
#if 0
@@ -184,7 +185,8 @@ void goto_symex_statet::assignment(
184
185
185
186
// do the l2 renaming
186
187
const auto level2_it =
187
- level2.current_names .emplace (l1_identifier, std::make_pair (lhs, 0 )).first ;
188
+ level2.current_names .emplace (l1_identifier, std::make_pair (l1_lhs.value , 0 ))
189
+ .first ;
188
190
symex_renaming_levelt::increase_counter (level2_it);
189
191
set_l2_indices (lhs, ns);
190
192
@@ -264,7 +266,8 @@ void goto_symex_statet::set_l2_indices(
264
266
}
265
267
266
268
template <levelt level>
267
- ssa_exprt goto_symex_statet::rename_ssa (ssa_exprt ssa, const namespacet &ns)
269
+ renamedt<ssa_exprt, level>
270
+ goto_symex_statet::rename_ssa (ssa_exprt ssa, const namespacet &ns)
268
271
{
269
272
static_assert (
270
273
level == L0 || level == L1,
@@ -278,15 +281,16 @@ ssa_exprt goto_symex_statet::rename_ssa(ssa_exprt ssa, const namespacet &ns)
278
281
279
282
rename <level>(ssa.type (), ssa.get_identifier (), ns);
280
283
ssa.update_type ();
281
- return ssa;
284
+ return renamedt<ssa_exprt, level>{ ssa} ;
282
285
}
283
286
284
287
// / Ensure `rename_ssa` gets compiled for L0
285
- template ssa_exprt
288
+ template renamedt< ssa_exprt, L0>
286
289
goto_symex_statet::rename_ssa<L0>(ssa_exprt ssa, const namespacet &ns);
287
290
288
291
template <levelt level>
289
- exprt goto_symex_statet::rename (exprt expr, const namespacet &ns)
292
+ renamedt<exprt, level>
293
+ goto_symex_statet::rename (exprt expr, const namespacet &ns)
290
294
{
291
295
// rename all the symbols with their last known value
292
296
@@ -297,11 +301,11 @@ exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
297
301
298
302
if (level == L0)
299
303
{
300
- ssa = rename_ssa<L0>(std::move (ssa), ns);
304
+ ssa = rename_ssa<L0>(std::move (ssa), ns). value ;
301
305
}
302
306
else if (level == L1)
303
307
{
304
- ssa = rename_ssa<L1>(std::move (ssa), ns);
308
+ ssa = rename_ssa<L1>(std::move (ssa), ns). value ;
305
309
}
306
310
else if (level==L2)
307
311
{
@@ -336,7 +340,7 @@ exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
336
340
if (as_const (expr).type ().id () == ID_code)
337
341
rename <level>(expr.type (), to_symbol_expr (expr).get_identifier (), ns);
338
342
else
339
- expr = rename <level>(ssa_exprt{expr}, ns);
343
+ expr = rename <level>(ssa_exprt{expr}, ns). value ;
340
344
}
341
345
else if (expr.id ()==ID_address_of)
342
346
{
@@ -351,7 +355,7 @@ exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
351
355
352
356
// do this recursively
353
357
Forall_operands (it, expr)
354
- *it = rename <level>(std::move (*it), ns);
358
+ *it = rename <level>(std::move (*it), ns). value ;
355
359
356
360
const exprt &c_expr = as_const (expr);
357
361
INVARIANT (
@@ -363,7 +367,7 @@ exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
363
367
" Type of renamed expr should be the same as operands for with_exprt and "
364
368
" if_exprt" );
365
369
}
366
- return expr;
370
+ return renamedt<exprt, level>{ expr} ;
367
371
}
368
372
369
373
// / thread encoding
@@ -573,13 +577,14 @@ void goto_symex_statet::rename_address(exprt &expr, const namespacet &ns)
573
577
expr.type () = to_array_type (index_expr.array ().type ()).subtype ();
574
578
575
579
// the index is not an address
576
- index_expr.index () = rename <level>(std::move (index_expr.index ()), ns);
580
+ index_expr.index () =
581
+ rename <level>(std::move (index_expr.index ()), ns).value ;
577
582
}
578
583
else if (expr.id ()==ID_if)
579
584
{
580
585
// the condition is not an address
581
586
if_exprt &if_expr=to_if_expr (expr);
582
- if_expr.cond () = rename <level>(std::move (if_expr.cond ()), ns);
587
+ if_expr.cond () = rename <level>(std::move (if_expr.cond ()), ns). value ;
583
588
rename_address<level>(if_expr.true_case (), ns);
584
589
rename_address<level>(if_expr.false_case (), ns);
585
590
@@ -718,7 +723,7 @@ void goto_symex_statet::rename(
718
723
{
719
724
auto &array_type = to_array_type (type);
720
725
rename <level>(array_type.subtype (), irep_idt (), ns);
721
- array_type.size () = rename <level>(std::move (array_type.size ()), ns);
726
+ array_type.size () = rename <level>(std::move (array_type.size ()), ns). value ;
722
727
}
723
728
else if (type.id () == ID_struct || type.id () == ID_union)
724
729
{
@@ -731,7 +736,8 @@ void goto_symex_statet::rename(
731
736
if (component.type ().id () == ID_array)
732
737
{
733
738
auto &array_type = to_array_type (component.type ());
734
- array_type.size () = rename <level>(std::move (array_type.size ()), ns);
739
+ array_type.size () =
740
+ rename <level>(std::move (array_type.size ()), ns).value ;
735
741
}
736
742
else if (component.type ().id () != ID_pointer)
737
743
rename <level>(component.type (), irep_idt (), ns);
0 commit comments