@@ -98,7 +98,7 @@ void goto_program_dereferencet::dereference_failure(
98
98
// / and use `dereference` on subexpressions of the form `*p`
99
99
// / \param expr: expression in which to remove dereferences
100
100
// / \param guard: boolean expression assumed to hold when dereferencing
101
- void goto_program_dereferencet::dereference_rec (exprt &expr, guardt &guard )
101
+ void goto_program_dereferencet::dereference_rec (exprt &expr)
102
102
{
103
103
if (!has_subexpr (expr, ID_dereference))
104
104
return ;
@@ -109,24 +109,15 @@ void goto_program_dereferencet::dereference_rec(exprt &expr, guardt &guard)
109
109
throw expr.id_string ()+" must be Boolean, but got " +
110
110
expr.pretty ();
111
111
112
- guardt old_guard=guard;
113
-
114
112
for (auto &op : expr.operands ())
115
113
{
116
114
if (!op.is_boolean ())
117
115
throw expr.id_string ()+" takes Boolean operands only, but got " +
118
116
op.pretty ();
119
117
120
118
if (has_subexpr (op, ID_dereference))
121
- dereference_rec (op, guard);
122
-
123
- if (expr.id ()==ID_or)
124
- guard.add (boolean_negate (op));
125
- else
126
- guard.add (op);
119
+ dereference_rec (op);
127
120
}
128
-
129
- guard = std::move (old_guard);
130
121
return ;
131
122
}
132
123
else if (expr.id ()==ID_if)
@@ -142,26 +133,16 @@ void goto_program_dereferencet::dereference_rec(exprt &expr, guardt &guard)
142
133
throw msg;
143
134
}
144
135
145
- dereference_rec (expr.op0 (), guard );
136
+ dereference_rec (expr.op0 ());
146
137
147
138
bool o1 = has_subexpr (expr.op1 (), ID_dereference);
148
139
bool o2 = has_subexpr (expr.op2 (), ID_dereference);
149
140
150
141
if (o1)
151
- {
152
- guardt old_guard=guard;
153
- guard.add (expr.op0 ());
154
- dereference_rec (expr.op1 (), guard);
155
- guard = std::move (old_guard);
156
- }
142
+ dereference_rec (expr.op1 ());
157
143
158
144
if (o2)
159
- {
160
- guardt old_guard=guard;
161
- guard.add (boolean_negate (expr.op0 ()));
162
- dereference_rec (expr.op2 (), guard);
163
- guard = std::move (old_guard);
164
- }
145
+ dereference_rec (expr.op2 ());
165
146
166
147
return ;
167
148
}
@@ -179,7 +160,7 @@ void goto_program_dereferencet::dereference_rec(exprt &expr, guardt &guard)
179
160
}
180
161
181
162
Forall_operands (it, expr)
182
- dereference_rec (*it, guard );
163
+ dereference_rec (*it);
183
164
184
165
if (expr.id ()==ID_dereference)
185
166
{
@@ -232,15 +213,13 @@ void goto_program_dereferencet::dereference_expr(
232
213
exprt &expr,
233
214
const bool checks_only)
234
215
{
235
- guardt guard{true_exprt{}};
236
-
237
216
if (checks_only)
238
217
{
239
218
exprt tmp (expr);
240
- dereference_rec (tmp, guard );
219
+ dereference_rec (tmp);
241
220
}
242
221
else
243
- dereference_rec (expr, guard );
222
+ dereference_rec (expr);
244
223
}
245
224
246
225
void goto_program_dereferencet::dereference_program (
0 commit comments