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 <statet::L1>(ssa_exprt{code.symbol ()}, ns);
30
25
31
26
// in case of pointers, put something into the value set
@@ -44,10 +39,13 @@ void goto_symext::symex_dead(statet &state)
44
39
45
40
const irep_idt &l1_identifier = ssa.get_identifier ();
46
41
47
- // prevent propagation
42
+ // we cannot remove the object from the L1 renaming map, because L1 renaming
43
+ // information is not local to a path, but removing it from the propagation
44
+ // map is safe as 1) it is local to a path and 2) this instance can no longer
45
+ // appear
48
46
state.propagation .erase (l1_identifier);
49
-
50
- // L2 renaming
47
+ // increment the L2 index to ensure a merge on join points will propagate the
48
+ // value for branches that are still live
51
49
auto level2_it = state.level2 .current_names .find (l1_identifier);
52
50
if (level2_it != state.level2 .current_names .end ())
53
51
symex_renaming_levelt::increase_counter (level2_it);
0 commit comments