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 = state.rename_ssa <L1>(ssa_exprt{code.symbol ()}, ns);
30
25
31
26
// in case of pointers, put something into the value set
@@ -43,10 +38,13 @@ void goto_symext::symex_dead(statet &state)
43
38
44
39
const irep_idt &l1_identifier = ssa.get_identifier ();
45
40
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
47
45
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
50
48
auto level2_it = state.level2 .current_names .find (l1_identifier);
51
49
if (level2_it != state.level2 .current_names .end ())
52
50
symex_renaming_levelt::increase_counter (level2_it);
0 commit comments