@@ -165,15 +165,16 @@ void goto_symex_statet::assignment(
165
165
bool allow_pointer_unsoundness)
166
166
{
167
167
// identifier should be l0 or l1, make sure it's l1
168
- lhs = rename_ssa<L1>(std::move (lhs), ns);
168
+ renamedt<ssa_exprt, L1> l1_lhs = rename_ssa<L1>(std::move (lhs), ns);
169
169
irep_idt l1_identifier=lhs.get_identifier ();
170
170
171
171
// the type might need renaming
172
- rename<L2>(lhs .type (), l1_identifier, ns);
173
- lhs .update_type ();
172
+ rename<L2>(l1_lhs. value .type (), l1_identifier, ns);
173
+ l1_lhs. value .update_type ();
174
174
if (run_validation_checks)
175
175
{
176
- DATA_INVARIANT (!check_renaming_l1 (lhs), " lhs renaming failed on l1" );
176
+ DATA_INVARIANT (
177
+ !check_renaming_l1 (l1_lhs.value ), " lhs renaming failed on l1" );
177
178
}
178
179
179
180
#if 0
@@ -186,7 +187,8 @@ void goto_symex_statet::assignment(
186
187
187
188
// do the l2 renaming
188
189
const auto level2_it =
189
- level2.current_names .emplace (l1_identifier, std::make_pair (lhs, 0 )).first ;
190
+ level2.current_names .emplace (l1_identifier, std::make_pair (l1_lhs.value , 0 ))
191
+ .first ;
190
192
symex_renaming_levelt::increase_counter (level2_it);
191
193
set_l2_indices (lhs, ns);
192
194
@@ -269,7 +271,8 @@ void goto_symex_statet::set_l2_indices(
269
271
}
270
272
271
273
template <levelt level>
272
- ssa_exprt goto_symex_statet::rename_ssa (ssa_exprt ssa, const namespacet &ns)
274
+ renamedt<ssa_exprt, level>
275
+ goto_symex_statet::rename_ssa (ssa_exprt ssa, const namespacet &ns)
273
276
{
274
277
static_assert (
275
278
level == L0 || level == L1,
@@ -283,17 +286,18 @@ ssa_exprt goto_symex_statet::rename_ssa(ssa_exprt ssa, const namespacet &ns)
283
286
284
287
rename<level>(ssa.type (), ssa.get_identifier (), ns);
285
288
ssa.update_type ();
286
- return ssa;
289
+ return renamedt<ssa_exprt, level>{ ssa} ;
287
290
}
288
291
289
292
// / Ensure `rename_ssa` gets compiled for L0
290
- template ssa_exprt
293
+ template renamedt< ssa_exprt, L0>
291
294
goto_symex_statet::rename_ssa<L0>(ssa_exprt ssa, const namespacet &ns);
292
295
template ssa_exprt
293
296
goto_symex_statet::rename_ssa<L1>(ssa_exprt ssa, const namespacet &ns);
294
297
295
298
template <levelt level>
296
- exprt goto_symex_statet::rename (exprt expr, const namespacet &ns)
299
+ renamedt<exprt, level>
300
+ goto_symex_statet::rename (exprt expr, const namespacet &ns)
297
301
{
298
302
// rename all the symbols with their last known value
299
303
@@ -304,11 +308,11 @@ exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
304
308
305
309
if (level == L0)
306
310
{
307
- ssa = rename_ssa<L0>(std::move (ssa), ns);
311
+ ssa = rename_ssa<L0>(std::move (ssa), ns). value ;
308
312
}
309
313
else if (level == L1)
310
314
{
311
- ssa = rename_ssa<L1>(std::move (ssa), ns);
315
+ ssa = rename_ssa<L1>(std::move (ssa), ns). value ;
312
316
}
313
317
else if (level==L2)
314
318
{
@@ -345,7 +349,7 @@ exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
345
349
if (type.id () == ID_code || type.id () == ID_mathematical_function)
346
350
rename<level>(expr.type (), to_symbol_expr (expr).get_identifier (), ns);
347
351
else
348
- expr = rename<level>(ssa_exprt{expr}, ns);
352
+ expr = rename<level>(ssa_exprt{expr}, ns). value ;
349
353
}
350
354
else if (expr.id ()==ID_address_of)
351
355
{
@@ -360,7 +364,7 @@ exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
360
364
361
365
// do this recursively
362
366
Forall_operands (it, expr)
363
- *it = rename<level>(std::move (*it), ns);
367
+ *it = rename<level>(std::move (*it), ns). value ;
364
368
365
369
const exprt &c_expr = as_const (expr);
366
370
INVARIANT (
@@ -372,7 +376,7 @@ exprt goto_symex_statet::rename(exprt expr, const namespacet &ns)
372
376
" Type of renamed expr should be the same as operands for with_exprt and "
373
377
" if_exprt" );
374
378
}
375
- return expr;
379
+ return renamedt<exprt, level>{ expr} ;
376
380
}
377
381
378
382
template exprt goto_symex_statet::rename<L1>(exprt expr, const namespacet &ns);
@@ -584,13 +588,14 @@ void goto_symex_statet::rename_address(exprt &expr, const namespacet &ns)
584
588
expr.type () = to_array_type (index_expr.array ().type ()).subtype ();
585
589
586
590
// the index is not an address
587
- index_expr.index () = rename<level>(std::move (index_expr.index ()), ns);
591
+ index_expr.index () =
592
+ rename<level>(std::move (index_expr.index ()), ns).value ;
588
593
}
589
594
else if (expr.id ()==ID_if)
590
595
{
591
596
// the condition is not an address
592
597
if_exprt &if_expr=to_if_expr (expr);
593
- if_expr.cond () = rename<level>(std::move (if_expr.cond ()), ns);
598
+ if_expr.cond () = rename<level>(std::move (if_expr.cond ()), ns). value ;
594
599
rename_address<level>(if_expr.true_case (), ns);
595
600
rename_address<level>(if_expr.false_case (), ns);
596
601
@@ -723,7 +728,7 @@ void goto_symex_statet::rename(
723
728
{
724
729
auto &array_type = to_array_type (type);
725
730
rename<level>(array_type.subtype (), irep_idt (), ns);
726
- array_type.size () = rename<level>(std::move (array_type.size ()), ns);
731
+ array_type.size () = rename<level>(std::move (array_type.size ()), ns). value ;
727
732
}
728
733
else if (type.id () == ID_struct || type.id () == ID_union)
729
734
{
@@ -736,7 +741,8 @@ void goto_symex_statet::rename(
736
741
if (component.type ().id () == ID_array)
737
742
{
738
743
auto &array_type = to_array_type (component.type ());
739
- array_type.size () = rename<level>(std::move (array_type.size ()), ns);
744
+ array_type.size () =
745
+ rename<level>(std::move (array_type.size ()), ns).value ;
740
746
}
741
747
else if (component.type ().id () != ID_pointer)
742
748
rename<level>(component.type (), irep_idt (), ns);
0 commit comments