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