11
11
12
12
#include " goto_symex.h"
13
13
14
- #include < cassert>
15
-
16
14
#include < util/std_expr.h>
17
15
18
16
#include < pointer-analysis/add_failed_symbols.h>
@@ -23,9 +21,6 @@ void goto_symext::symex_dead(statet &state)
23
21
24
22
const code_deadt &code = instruction.get_dead ();
25
23
26
- // We increase the L2 renaming to make these non-deterministic.
27
- // We also prevent propagation of old values.
28
-
29
24
ssa_exprt ssa (code.symbol ());
30
25
state.rename (ssa, ns, goto_symex_statet::L1);
31
26
@@ -45,13 +40,15 @@ void goto_symext::symex_dead(statet &state)
45
40
state.value_set .assign (ssa, rhs, ns, true , false );
46
41
}
47
42
48
- ssa_exprt ssa_lhs=to_ssa_expr (ssa);
49
- const irep_idt &l1_identifier=ssa_lhs.get_identifier ();
43
+ const irep_idt &l1_identifier = to_ssa_expr (ssa).get_identifier ();
50
44
51
- // prevent propagation
45
+ // we cannot remove the object from the L1 renaming map, because L1 renaming
46
+ // information is not local to a path, but removing it from the propagation
47
+ // map is safe as 1) it is local to a path and 2) this instance can no longer
48
+ // appear
52
49
state.propagation .erase (l1_identifier);
53
-
54
- // L2 renaming
50
+ // increment the L2 index to ensure a merge on join points will propagate the
51
+ // value for branches that are still live
55
52
auto level2_it = state.level2 .current_names .find (l1_identifier);
56
53
if (level2_it != state.level2 .current_names .end ())
57
54
symex_renaming_levelt::increase_counter (level2_it);
0 commit comments