@@ -365,78 +365,63 @@ void goto_symex_statet::rename(
365
365
levelt level)
366
366
{
367
367
// rename all the symbols with their last known value
368
+ PRECONDITION (level == L2);
368
369
369
370
if (expr.id ()==ID_symbol &&
370
371
expr.get_bool (ID_C_SSA_symbol))
371
372
{
372
373
ssa_exprt &ssa=to_ssa_expr (expr);
374
+ set_l1_indices (level0, level1, ssa, source.thread_nr , ns);
375
+ rename (expr.type (), ssa.get_identifier (), ns);
376
+ ssa.update_type ();
373
377
374
- if (level == L1)
378
+ if (l2_thread_read_encoding (ssa, ns))
379
+ {
380
+ // renaming taken care of by l2_thread_encoding
381
+ }
382
+ else if (!ssa.get_level_2 ().empty ())
375
383
{
376
- set_l1_indices (level1, ssa, source.thread_nr , ns);
377
- rename (expr.type (), ssa.get_identifier (), ns, level);
378
- ssa.update_type ();
384
+ // already at L2
379
385
}
380
- else if (level==L2)
386
+ else
381
387
{
382
- set_l1_indices (level1, ssa, source. thread_nr , ns);
383
- rename (expr. type (), ssa. get_identifier (), ns, level);
384
- ssa.update_type ( );
388
+ // We also consider propagation if we go up to L2.
389
+ // L1 identifiers are used for propagation!
390
+ auto p_it = propagation. find ( ssa.get_identifier () );
385
391
386
- if (l2_thread_read_encoding (ssa, ns))
387
- {
388
- // renaming taken care of by l2_thread_encoding
389
- }
390
- else if (!ssa.get_level_2 ().empty ())
391
- {
392
- // already at L2
393
- }
392
+ if (p_it != propagation.end ())
393
+ expr = p_it->second ; // already L2
394
394
else
395
- {
396
- // We also consider propagation if we go up to L2.
397
- // L1 identifiers are used for propagation!
398
- auto p_it = propagation.find (ssa.get_identifier ());
399
-
400
- if (p_it != propagation.end ())
401
- expr=p_it->second ; // already L2
402
- else
403
- set_l2_indices (level1, level2, ssa, source.thread_nr , ns);
404
- }
395
+ set_l2_indices (level0, level1, level2, ssa, source.thread_nr , ns);
405
396
}
406
- else
407
- UNREACHABLE;
408
397
}
409
398
else if (expr.id ()==ID_symbol)
410
399
{
411
400
// we never rename function symbols
412
401
if (expr.type ().id () == ID_code)
413
402
{
414
- rename (
415
- expr.type (),
416
- to_symbol_expr (expr).get_identifier (),
417
- ns,
418
- level);
403
+ rename (expr.type (), to_symbol_expr (expr).get_identifier (), ns, L2);
419
404
420
405
return ;
421
406
}
422
407
423
408
expr=ssa_exprt (expr);
424
- rename (expr, ns, level );
409
+ rename (expr, ns);
425
410
}
426
411
else if (expr.id ()==ID_address_of)
427
412
{
428
413
auto &address_of_expr = to_address_of_expr (expr);
429
- rename_address (address_of_expr.object (), ns, level );
414
+ rename_address (address_of_expr.object (), ns, L2 );
430
415
to_pointer_type (expr.type ()).subtype () = address_of_expr.object ().type ();
431
416
}
432
417
else
433
418
{
434
419
// this could go wrong, but we would have to re-typecheck ...
435
- rename (expr.type (), irep_idt (), ns, level );
420
+ rename (expr.type (), irep_idt (), ns, L2 );
436
421
437
422
// do this recursively
438
423
Forall_operands (it, expr)
439
- rename (*it, ns, level );
424
+ rename (*it, ns);
440
425
441
426
// some fixes
442
427
if (expr.id ()==ID_with)
0 commit comments