Skip to content

Commit 22999aa

Browse files
authored
Merge pull request #6727 from tautschnig/cleanup/find_symbols
Cleanup find_symbols API
2 parents ca064fc + 5bf57ef commit 22999aa

14 files changed

+313
-185
lines changed

src/ansi-c/expr2c.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1663,9 +1663,6 @@ std::string expr2ct::convert_symbol(const exprt &src)
16631663
#endif
16641664
}
16651665

1666-
if(src.id()==ID_next_symbol)
1667-
dest="NEXT("+dest+")";
1668-
16691666
return dest;
16701667
}
16711668

@@ -3850,9 +3847,6 @@ std::string expr2ct::convert_with_precedence(
38503847
else if(src.id()==ID_symbol)
38513848
return convert_symbol(src);
38523849

3853-
else if(src.id()==ID_next_symbol)
3854-
return convert_symbol(src);
3855-
38563850
else if(src.id()==ID_nondet_symbol)
38573851
return convert_nondet_symbol(to_nondet_symbol_expr(src));
38583852

src/ansi-c/goto_check_c.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -461,12 +461,12 @@ void goto_check_ct::invalidate(const exprt &lhs)
461461
else if(lhs.id() == ID_symbol)
462462
{
463463
// clear all assertions about 'symbol'
464-
find_symbols_sett find_symbols_set{to_symbol_expr(lhs).get_identifier()};
464+
const irep_idt &lhs_id = to_symbol_expr(lhs).get_identifier();
465465

466466
for(auto it = assertions.begin(); it != assertions.end();)
467467
{
468468
if(
469-
has_symbol(it->second, find_symbols_set) ||
469+
has_symbol_expr(it->second, lhs_id, false) ||
470470
has_subexpr(it->second, ID_dereference))
471471
{
472472
it = assertions.erase(it);

src/goto-instrument/accelerate/accelerate.cpp

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -383,21 +383,16 @@ void acceleratet::add_dirty_checks()
383383

384384
// Find which symbols are read, i.e. those appearing in a guard or on
385385
// the right hand side of an assignment. Assume each is not dirty.
386-
find_symbols_sett read;
386+
std::set<symbol_exprt> read;
387387

388388
if(it->has_condition())
389-
find_symbols_or_nexts(it->condition(), read);
389+
find_symbols(it->condition(), read);
390390

391391
if(it->is_assign())
392-
{
393-
find_symbols_or_nexts(it->assign_rhs(), read);
394-
}
392+
find_symbols(it->assign_rhs(), read);
395393

396-
for(find_symbols_sett::iterator jt=read.begin();
397-
jt!=read.end();
398-
++jt)
394+
for(const auto &var : read)
399395
{
400-
const exprt &var=ns.lookup(*jt).symbol_expr();
401396
expr_mapt::iterator dirty_var=dirty_vars_map.find(var);
402397

403398
if(dirty_var==dirty_vars_map.end())

src/goto-instrument/accelerate/acceleration_utils.cpp

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -198,18 +198,19 @@ void acceleration_utilst::stash_variables(
198198
expr_sett modified,
199199
substitutiont &substitution)
200200
{
201-
find_symbols_sett vars =
202-
find_symbols_or_nexts(modified.begin(), modified.end());
203-
const irep_idt &loop_counter_name =
204-
to_symbol_expr(loop_counter).get_identifier();
205-
vars.erase(loop_counter_name);
201+
const symbol_exprt &loop_counter_sym = to_symbol_expr(loop_counter);
206202

207-
for(const irep_idt &symbol : vars)
203+
std::set<symbol_exprt> vars;
204+
for(const exprt &expr : modified)
205+
find_symbols(expr, vars);
206+
207+
vars.erase(loop_counter_sym);
208+
209+
for(const symbol_exprt &orig : vars)
208210
{
209-
const symbolt &orig = symbol_table.lookup_ref(symbol);
210-
symbolt stashed_sym=fresh_symbol("polynomial::stash", orig.type);
211-
substitution[orig.symbol_expr()]=stashed_sym.symbol_expr();
212-
program.assign(stashed_sym.symbol_expr(), orig.symbol_expr());
211+
symbolt stashed_sym = fresh_symbol("polynomial::stash", orig.type());
212+
substitution[orig] = stashed_sym.symbol_expr();
213+
program.assign(stashed_sym.symbol_expr(), orig);
213214
}
214215
}
215216

src/goto-instrument/dump_c.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -913,9 +913,7 @@ void dump_ct::convert_global_variable(
913913

914914
code_frontend_declt d(symbol.symbol_expr());
915915

916-
find_symbols_sett syms;
917-
if(symbol.value.is_not_nil())
918-
find_symbols_or_nexts(symbol.value, syms);
916+
find_symbols_sett syms = find_symbol_identifiers(symbol.value);
919917

920918
// add a tentative declaration to cater for symbols in the initializer
921919
// relying on it this symbol

src/goto-instrument/full_slicer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ void full_slicert::add_decl_dead(
6262

6363
find_symbols_sett syms;
6464

65-
node.PC->apply([&syms](const exprt &e) { find_symbols_or_nexts(e, syms); });
65+
node.PC->apply([&syms](const exprt &e) { find_symbols(e, syms); });
6666

6767
for(find_symbols_sett::const_iterator
6868
it=syms.begin();

src/goto-programs/goto_program.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -760,8 +760,7 @@ void goto_programt::instructiont::validate(
760760

761761
auto expr_symbol_finder = [&](const exprt &e) {
762762
find_symbols_sett typetags;
763-
find_type_symbols(e.type(), typetags);
764-
find_symbols_or_nexts(e, typetags);
763+
find_type_and_expr_symbols(e, typetags);
765764
const symbolt *symbol;
766765
for(const auto &identifier : typetags)
767766
{
@@ -873,7 +872,7 @@ void goto_programt::instructiont::validate(
873872
"assert instruction should not have a target",
874873
source_location());
875874

876-
std::for_each(guard.depth_begin(), guard.depth_end(), expr_symbol_finder);
875+
expr_symbol_finder(guard);
877876
std::for_each(guard.depth_begin(), guard.depth_end(), type_finder);
878877
break;
879878
case OTHER:
@@ -940,7 +939,7 @@ void goto_programt::instructiont::validate(
940939
"function call instruction should contain a call statement",
941940
source_location());
942941

943-
std::for_each(_code.depth_begin(), _code.depth_end(), expr_symbol_finder);
942+
expr_symbol_finder(_code);
944943
std::for_each(_code.depth_begin(), _code.depth_end(), type_finder);
945944
break;
946945
case THROW:

src/goto-programs/slice_global_inits.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ void slice_global_inits(
6464
for(const auto &i : it->second.body.instructions)
6565
{
6666
i.apply([&symbols_to_keep](const exprt &expr) {
67-
find_symbols(expr, symbols_to_keep, true, false);
67+
find_symbols(expr, symbols_to_keep);
6868
});
6969
}
7070
}
@@ -103,7 +103,7 @@ void slice_global_inits(
103103
symbols_to_keep.find(id) != symbols_to_keep.end())
104104
{
105105
fixed_point_reached = false;
106-
find_symbols(instruction.assign_rhs(), symbols_to_keep, true, false);
106+
find_symbols(instruction.assign_rhs(), symbols_to_keep);
107107
*seen_it = true;
108108
}
109109
}

src/goto-symex/postcondition.cpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -164,13 +164,14 @@ bool postconditiont::is_used(
164164
else if(expr.id()==ID_dereference)
165165
{
166166
// aliasing may happen here
167-
const std::vector<exprt> expr_set =
168-
value_set.get_value_set(to_dereference_expr(expr).pointer(), ns);
169-
const auto original_names = make_range(expr_set).map(
170-
[](const exprt &e) { return get_original_name(e); });
171-
const std::unordered_set<irep_idt> symbols =
172-
find_symbols_or_nexts(original_names.begin(), original_names.end());
173-
return symbols.find(identifier)!=symbols.end();
167+
for(const exprt &e :
168+
value_set.get_value_set(to_dereference_expr(expr).pointer(), ns))
169+
{
170+
if(has_symbol_expr(get_original_name(e), identifier, false))
171+
return true;
172+
}
173+
174+
return false;
174175
}
175176
else
176177
forall_operands(it, expr)

src/goto-symex/precondition.cpp

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -113,14 +113,19 @@ void preconditiont::compute_rec(exprt &dest)
113113

114114
// aliasing may happen here
115115

116-
const std::vector<exprt> expr_set = value_sets.get_values(
117-
SSA_step.source.function_id, target, deref_expr.pointer());
118-
const std::unordered_set<irep_idt> symbols =
119-
find_symbols_or_nexts(expr_set.begin(), expr_set.end());
116+
bool may_alias = false;
117+
for(const exprt &e : value_sets.get_values(
118+
SSA_step.source.function_id, target, deref_expr.pointer()))
119+
{
120+
if(has_symbol_expr(e, lhs_identifier, false))
121+
{
122+
may_alias = true;
123+
break;
124+
}
125+
}
120126

121-
if(symbols.find(lhs_identifier)!=symbols.end())
127+
if(may_alias)
122128
{
123-
// may alias!
124129
exprt tmp;
125130
tmp.swap(deref_expr.pointer());
126131
dereference(SSA_step.source.function_id, target, tmp, ns, value_sets);

src/util/find_macros.cpp

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -42,19 +42,6 @@ void find_macros(
4242
stack.push(&symbol.value);
4343
}
4444
}
45-
else if(e.id() == ID_next_symbol)
46-
{
47-
const irep_idt &identifier=e.get(ID_identifier);
48-
49-
const symbolt &symbol=ns.lookup(identifier);
50-
51-
if(symbol.is_macro)
52-
{
53-
// inserted?
54-
if(dest.insert(identifier).second)
55-
stack.push(&symbol.value);
56-
}
57-
}
5845
else
5946
{
6047
forall_operands(it, e)

0 commit comments

Comments
 (0)