@@ -11,8 +11,6 @@ Author: Daniel Kroening, kroening@kroening.com
1111
1212#include " goto_symex.h"
1313
14- #include < cassert>
15-
1614#include < util/std_expr.h>
1715
1816#include < pointer-analysis/add_failed_symbols.h>
@@ -23,9 +21,6 @@ void goto_symext::symex_dead(statet &state)
2321
2422 const code_deadt &code = instruction.get_dead ();
2523
26- // We increase the L2 renaming to make these non-deterministic.
27- // We also prevent propagation of old values.
28-
2924 ssa_exprt ssa = state.rename_ssa <L1>(ssa_exprt{code.symbol ()}, ns);
3025
3126 // in case of pointers, put something into the value set
@@ -43,10 +38,13 @@ void goto_symext::symex_dead(statet &state)
4338
4439 const irep_idt &l1_identifier = ssa.get_identifier ();
4540
46- // prevent propagation
41+ // we cannot remove the object from the L1 renaming map, because L1 renaming
42+ // information is not local to a path, but removing it from the propagation
43+ // map is safe as 1) it is local to a path and 2) this instance can no longer
44+ // appear
4745 state.propagation .erase (l1_identifier);
48-
49- // L2 renaming
46+ // increment the L2 index to ensure a merge on join points will propagate the
47+ // value for branches that are still live
5048 auto level2_it = state.level2 .current_names .find (l1_identifier);
5149 if (level2_it != state.level2 .current_names .end ())
5250 symex_renaming_levelt::increase_counter (level2_it);
0 commit comments