Skip to content

Commit 4716606

Browse files
committed
Symex-dereference: remove unused guard parameter
This was propagated between dereference_rec and address_arithmetic without ever changing, before finally passing into value_set_dereferencet::dereference as a const reference.
1 parent 45104b6 commit 4716606

File tree

2 files changed

+21
-25
lines changed

2 files changed

+21
-25
lines changed

src/goto-symex/goto_symex.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,11 +226,10 @@ class goto_symext
226226
exprt make_auto_object(const typet &, statet &);
227227
virtual void dereference(exprt &, statet &);
228228

229-
void dereference_rec(exprt &, statet &, guardt &);
229+
void dereference_rec(exprt &, statet &);
230230
exprt address_arithmetic(
231231
const exprt &,
232232
statet &,
233-
guardt &,
234233
bool keep_array);
235234

236235
virtual void symex_goto(statet &);

src/goto-symex/symex_dereference.cpp

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ Author: Daniel Kroening, [email protected]
2727
exprt goto_symext::address_arithmetic(
2828
const exprt &expr,
2929
statet &state,
30-
guardt &guard,
3130
bool keep_array)
3231
{
3332
exprt result;
@@ -41,7 +40,7 @@ exprt goto_symext::address_arithmetic(
4140
const byte_extract_exprt &be=to_byte_extract_expr(expr);
4241

4342
// recursive call
44-
result=address_arithmetic(be.op(), state, guard, keep_array);
43+
result = address_arithmetic(be.op(), state, keep_array);
4544

4645
if(be.op().type().id() == ID_array && result.id() == ID_address_of)
4746
{
@@ -59,7 +58,7 @@ exprt goto_symext::address_arithmetic(
5958

6059
// there could be further dereferencing in the offset
6160
exprt offset=be.offset();
62-
dereference_rec(offset, state, guard);
61+
dereference_rec(offset, state);
6362

6463
result=plus_exprt(result, offset);
6564

@@ -84,7 +83,7 @@ exprt goto_symext::address_arithmetic(
8483
byte_extract_id(), ode.root_object(), ode.offset(), expr.type());
8584

8685
// recursive call
87-
result=address_arithmetic(be, state, guard, keep_array);
86+
result = address_arithmetic(be, state, keep_array);
8887

8988
do_simplify(result);
9089
}
@@ -95,20 +94,20 @@ exprt goto_symext::address_arithmetic(
9594
// just grab the pointer, but be wary of further dereferencing
9695
// in the pointer itself
9796
result=to_dereference_expr(expr).pointer();
98-
dereference_rec(result, state, guard);
97+
dereference_rec(result, state);
9998
}
10099
else if(expr.id()==ID_if)
101100
{
102101
if_exprt if_expr=to_if_expr(expr);
103102

104103
// the condition is not an address
105-
dereference_rec(if_expr.cond(), state, guard);
104+
dereference_rec(if_expr.cond(), state);
106105

107106
// recursive call
108-
if_expr.true_case()=
109-
address_arithmetic(if_expr.true_case(), state, guard, keep_array);
110-
if_expr.false_case()=
111-
address_arithmetic(if_expr.false_case(), state, guard, keep_array);
107+
if_expr.true_case() =
108+
address_arithmetic(if_expr.true_case(), state, keep_array);
109+
if_expr.false_case() =
110+
address_arithmetic(if_expr.false_case(), state, keep_array);
112111

113112
result=if_expr;
114113
}
@@ -119,7 +118,7 @@ exprt goto_symext::address_arithmetic(
119118
{
120119
// give up, just dereference
121120
result=expr;
122-
dereference_rec(result, state, guard);
121+
dereference_rec(result, state);
123122

124123
// turn &array into &array[0]
125124
if(result.type().id() == ID_array && !keep_array)
@@ -143,7 +142,7 @@ exprt goto_symext::address_arithmetic(
143142
from_integer(offset, index_type()),
144143
expr.type());
145144

146-
result=address_arithmetic(be, state, guard, keep_array);
145+
result = address_arithmetic(be, state, keep_array);
147146

148147
do_simplify(result);
149148
}
@@ -154,7 +153,7 @@ exprt goto_symext::address_arithmetic(
154153
{
155154
const typecast_exprt &tc_expr = to_typecast_expr(expr);
156155

157-
result = address_arithmetic(tc_expr.op(), state, guard, keep_array);
156+
result = address_arithmetic(tc_expr.op(), state, keep_array);
158157

159158
// treat &array as &array[0]
160159
const typet &expr_type = expr.type();
@@ -179,7 +178,7 @@ exprt goto_symext::address_arithmetic(
179178
return result;
180179
}
181180

182-
void goto_symext::dereference_rec(exprt &expr, statet &state, guardt &guard)
181+
void goto_symext::dereference_rec(exprt &expr, statet &state)
183182
{
184183
if(expr.id()==ID_dereference)
185184
{
@@ -203,7 +202,7 @@ void goto_symext::dereference_rec(exprt &expr, statet &state, guardt &guard)
203202
tmp1.swap(to_dereference_expr(expr).pointer());
204203

205204
// first make sure there are no dereferences in there
206-
dereference_rec(tmp1, state, guard);
205+
dereference_rec(tmp1, state);
207206

208207
// we need to set up some elaborate call-backs
209208
symex_dereference_statet symex_dereference_state(*this, state);
@@ -216,7 +215,7 @@ void goto_symext::dereference_rec(exprt &expr, statet &state, guardt &guard)
216215
expr_is_not_null);
217216

218217
// std::cout << "**** " << format(tmp1) << '\n';
219-
exprt tmp2 = dereference.dereference(tmp1, guard);
218+
exprt tmp2 = dereference.dereference(tmp1, guardt(true_exprt()));
220219
// std::cout << "**** " << format(tmp2) << '\n';
221220

222221
expr.swap(tmp2);
@@ -242,7 +241,7 @@ void goto_symext::dereference_rec(exprt &expr, statet &state, guardt &guard)
242241
tmp.add_source_location()=expr.source_location();
243242

244243
// recursive call
245-
dereference_rec(tmp, state, guard);
244+
dereference_rec(tmp, state);
246245

247246
expr.swap(tmp);
248247
}
@@ -261,7 +260,6 @@ void goto_symext::dereference_rec(exprt &expr, statet &state, guardt &guard)
261260
expr = address_arithmetic(
262261
object,
263262
state,
264-
guard,
265263
to_pointer_type(expr.type()).subtype().id() == ID_array);
266264
}
267265
else if(expr.id()==ID_typecast)
@@ -282,17 +280,17 @@ void goto_symext::dereference_rec(exprt &expr, statet &state, guardt &guard)
282280
to_address_of_expr(tc_op).object(),
283281
from_integer(0, index_type())));
284282

285-
dereference_rec(expr, state, guard);
283+
dereference_rec(expr, state);
286284
}
287285
else
288286
{
289-
dereference_rec(tc_op, state, guard);
287+
dereference_rec(tc_op, state);
290288
}
291289
}
292290
else
293291
{
294292
Forall_operands(it, expr)
295-
dereference_rec(*it, state, guard);
293+
dereference_rec(*it, state);
296294
}
297295
}
298296

@@ -306,8 +304,7 @@ void goto_symext::dereference(exprt &expr, statet &state)
306304
state.rename(expr, ns, goto_symex_statet::L1);
307305

308306
// start the recursion!
309-
guardt guard{true_exprt{}};
310-
dereference_rec(expr, state, guard);
307+
dereference_rec(expr, state);
311308
// dereferencing may introduce new symbol_exprt
312309
// (like __CPROVER_memory)
313310
state.rename(expr, ns, goto_symex_statet::L1);

0 commit comments

Comments
 (0)