Skip to content

Commit 0cc5108

Browse files
committed
Avoid using replace_symbolt::insert(irep_idt, exprt)
All such cases will have a symbol_exprt in the vicinity and thus use insert(symbol_exprt, exprt) instead.
1 parent 4ffc2a4 commit 0cc5108

File tree

9 files changed

+35
-28
lines changed

9 files changed

+35
-28
lines changed

src/goto-instrument/code_contracts.cpp

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,10 @@ void code_contractst::apply_contract(
189189

190190
// TODO: return value could be nil
191191
if(type.return_type()!=empty_typet())
192-
replace.insert("__CPROVER_return_value", call.lhs());
192+
{
193+
symbol_exprt ret_val(CPROVER_PREFIX "return_value", call.lhs().type());
194+
replace.insert(ret_val, call.lhs());
195+
}
193196

194197
// formal parameters
195198
code_function_callt::argumentst::const_iterator a_it=
@@ -200,7 +203,10 @@ void code_contractst::apply_contract(
200203
a_it!=call.arguments().end();
201204
++p_it, ++a_it)
202205
if(!p_it->get_identifier().empty())
203-
replace.insert(p_it->get_identifier(), *a_it);
206+
{
207+
symbol_exprt p(p_it->get_identifier(), p_it->type());
208+
replace.insert(p, *a_it);
209+
}
204210

205211
replace(requires);
206212
replace(ensures);
@@ -319,7 +325,8 @@ void code_contractst::add_contract_check(
319325

320326
call.lhs()=r;
321327

322-
replace.insert("__CPROVER_return_value", r);
328+
symbol_exprt ret_val(CPROVER_PREFIX "return_value", call.lhs().type());
329+
replace.insert(ret_val, r);
323330
}
324331

325332
// decl parameter1 ...
@@ -340,7 +347,10 @@ void code_contractst::add_contract_check(
340347
call.arguments().push_back(p);
341348

342349
if(!p_it->get_identifier().empty())
343-
replace.insert(p_it->get_identifier(), p);
350+
{
351+
symbol_exprt cur_p(p_it->get_identifier(), p_it->type());
352+
replace.insert(cur_p, p);
353+
}
344354
}
345355

346356
// assume(requires)

src/goto-instrument/concurrency.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -89,19 +89,17 @@ void concurrency_instrumentationt::instrument(exprt &expr)
8989
{
9090
if(s_it->id()==ID_symbol)
9191
{
92-
const irep_idt identifier=
93-
to_symbol_expr(*s_it).get_identifier();
92+
const symbol_exprt &s = to_symbol_expr(*s_it);
9493

95-
shared_varst::const_iterator
96-
v_it=shared_vars.find(identifier);
94+
shared_varst::const_iterator v_it = shared_vars.find(s.get_identifier());
9795

9896
if(v_it!=shared_vars.end())
9997
{
10098
index_exprt new_expr;
10199
// new_expr.array()=symbol_expr();
102100
// new_expr.index()=symbol_expr();
103101

104-
replace_symbol.insert(identifier, new_expr);
102+
replace_symbol.insert(s, new_expr);
105103
}
106104
}
107105
}

src/goto-instrument/dump_c.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -915,23 +915,23 @@ void dump_ct::cleanup_harness(code_blockt &b)
915915
if(!ns.lookup("argc'", argc_sym))
916916
{
917917
symbol_exprt argc("argc", argc_sym->type);
918-
replace.insert(argc_sym->name, argc);
918+
replace.insert(argc_sym->symbol_expr(), argc);
919919
code_declt d(argc);
920920
decls.add(d);
921921
}
922922
const symbolt *argv_sym=nullptr;
923923
if(!ns.lookup("argv'", argv_sym))
924924
{
925925
symbol_exprt argv("argv", argv_sym->type);
926-
replace.insert(argv_sym->name, argv);
926+
replace.insert(argv_sym->symbol_expr(), argv);
927927
code_declt d(argv);
928928
decls.add(d);
929929
}
930930
const symbolt *return_sym=nullptr;
931931
if(!ns.lookup("return'", return_sym))
932932
{
933933
symbol_exprt return_value("return_value", return_sym->type);
934-
replace.insert(return_sym->name, return_value);
934+
replace.insert(return_sym->symbol_expr(), return_value);
935935
code_declt d(return_value);
936936
decls.add(d);
937937
}

src/goto-instrument/model_argc_argv.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,11 @@ bool model_argc_argv(
7474
return false;
7575
}
7676

77+
const symbolt &argc_primed = ns.lookup("argc'");
78+
symbol_exprt ARGC("ARGC", argc_primed.type);
79+
const symbolt &argv_primed = ns.lookup("argv'");
80+
symbol_exprt ARGV("ARGV", argv_primed.type);
81+
7782
// set the size of ARGV storage to 4096, which matches the minimum
7883
// guaranteed by POSIX (_POSIX_ARG_MAX):
7984
// http://pubs.opengroup.org/onlinepubs/009695399/basedefs/limits.h.html
@@ -126,8 +131,8 @@ bool model_argc_argv(
126131
value = symbol_pair.second.value;
127132

128133
replace_symbolt replace;
129-
replace.insert("ARGC", ns.lookup("argc'").symbol_expr());
130-
replace.insert("ARGV", ns.lookup("argv'").symbol_expr());
134+
replace.insert(ARGC, ns.lookup("argc'").symbol_expr());
135+
replace.insert(ARGV, ns.lookup("argv'").symbol_expr());
131136
replace(value);
132137
}
133138
else if(

src/linking/linking.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -993,7 +993,8 @@ void linkingt::duplicate_object_symbol(
993993
else if(set_to_new)
994994
old_symbol.type=new_symbol.type;
995995

996-
object_type_updates.insert(old_symbol.name, old_symbol.symbol_expr());
996+
object_type_updates.insert(
997+
old_symbol.symbol_expr(), old_symbol.symbol_expr());
997998
}
998999

9991000
// care about initializers

src/solvers/flattening/flatten_byte_operators.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ static exprt unpack_rec(
7979
{
8080
index_exprt index(src, from_integer(i, index_type()));
8181
replace_symbolt replace;
82-
replace.insert(ID_C_incomplete, index);
82+
replace.insert(dummy, index);
8383

8484
for(const auto &op : sub.operands())
8585
{

src/solvers/smt2/smt2_solver.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,9 @@ void smt2_solvert::expand_function_applications(exprt &expr)
106106
std::map<irep_idt, exprt> parameter_map;
107107
for(std::size_t i=0; i<f_type.domain().size(); i++)
108108
{
109-
const irep_idt p_identifier=
110-
f_type.domain()[i].get_identifier();
111-
112-
replace_symbol.insert(p_identifier, app.arguments()[i]);
109+
const auto &var = f_type.domain()[i];
110+
const symbol_exprt s(var.get_identifier(), var.type());
111+
replace_symbol.insert(s, app.arguments()[i]);
113112
}
114113

115114
exprt body=f.definition;

src/util/replace_symbol.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,6 @@ class replace_symbolt
2626
typedef std::unordered_map<irep_idt, exprt> expr_mapt;
2727
typedef std::unordered_map<irep_idt, typet> type_mapt;
2828

29-
void insert(const irep_idt &identifier,
30-
const exprt &expr)
31-
{
32-
expr_map.insert(std::pair<irep_idt, exprt>(identifier, expr));
33-
}
34-
3529
void insert(const class symbol_exprt &old_expr,
3630
const exprt &new_expr);
3731

unit/util/replace_symbol.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ TEST_CASE("Replace all symbols in expression", "[core][util][replace_symbol]")
2828
replace_symbolt r;
2929
REQUIRE(r.empty());
3030

31-
r.insert("a", other_expr);
31+
r.insert(s1, other_expr);
3232
REQUIRE(r.replaces_symbol("a"));
3333
REQUIRE(r.get_expr_map().size() == 1);
3434

@@ -63,7 +63,7 @@ TEST_CASE("Lvalue only", "[core][util][replace_symbol]")
6363
constant_exprt c("some_value", typet("some_type"));
6464

6565
replace_symbolt r;
66-
r.insert("a", c);
66+
r.insert(s1, c);
6767

6868
REQUIRE(r.replace(binary) == false);
6969
REQUIRE(binary.op0() == address_of_exprt(s1));

0 commit comments

Comments
 (0)