@@ -13,10 +13,9 @@ Date: December 2016
13
13
14
14
#include " slice_global_inits.h"
15
15
16
- #include < unordered_set>
17
-
18
16
#include < analyses/call_graph.h>
19
17
18
+ #include < util/find_symbols.h>
20
19
#include < util/namespace.h>
21
20
#include < util/std_expr.h>
22
21
#include < util/cprover_prefix.h>
@@ -46,23 +45,7 @@ void slice_global_inits(goto_modelt &goto_model)
46
45
47
46
// gather all symbols used by reachable functions
48
47
49
- class symbol_collectort :public const_expr_visitort
50
- {
51
- public:
52
- virtual void operator ()(const exprt &expr)
53
- {
54
- if (expr.id ()==ID_symbol)
55
- {
56
- const symbol_exprt &symbol_expr=to_symbol_expr (expr);
57
- const irep_idt id=symbol_expr.get_identifier ();
58
- symbols.insert (id);
59
- }
60
- }
61
-
62
- std::unordered_set<irep_idt, irep_id_hash> symbols;
63
- };
64
-
65
- symbol_collectort visitor;
48
+ find_symbols_sett symbols;
66
49
67
50
for (std::size_t node_idx = 0 ; node_idx < directed_graph.size (); ++node_idx)
68
51
{
@@ -76,12 +59,12 @@ void slice_global_inits(goto_modelt &goto_model)
76
59
forall_goto_program_instructions (i_it, goto_program)
77
60
{
78
61
const codet &code=i_it->code ;
79
- code.visit (visitor);
62
+ find_symbols (code, symbols, true , false );
63
+ const exprt &expr = i_it->guard ;
64
+ find_symbols (expr, symbols, true , false );
80
65
}
81
66
}
82
67
83
- const std::unordered_set<irep_idt, irep_id_hash> &symbols=visitor.symbols ;
84
-
85
68
// now remove unnecessary initializations
86
69
87
70
goto_functionst::function_mapt::iterator f_it;
0 commit comments