Skip to content

Commit d3e7b2c

Browse files
Remove unused guard argument of dereference_rec
This is never actually used. This allows to remove a lot of useless operations.
1 parent e46df0b commit d3e7b2c

File tree

2 files changed

+9
-31
lines changed

2 files changed

+9
-31
lines changed

src/pointer-analysis/goto_program_dereference.cpp

Lines changed: 8 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,7 @@ void goto_program_dereferencet::dereference_failure(
9797
/// Turn subexpression of `expr` of the form `&*p` into p
9898
/// and use `dereference` on subexpressions of the form `*p`
9999
/// \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)
102101
{
103102
if(!has_subexpr(expr, ID_dereference))
104103
return;
@@ -109,24 +108,15 @@ void goto_program_dereferencet::dereference_rec(exprt &expr, guardt &guard)
109108
throw expr.id_string()+" must be Boolean, but got "+
110109
expr.pretty();
111110

112-
guardt old_guard=guard;
113-
114111
for(auto &op : expr.operands())
115112
{
116113
if(!op.is_boolean())
117114
throw expr.id_string()+" takes Boolean operands only, but got "+
118115
op.pretty();
119116

120117
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);
127119
}
128-
129-
guard = std::move(old_guard);
130120
return;
131121
}
132122
else if(expr.id()==ID_if)
@@ -142,26 +132,16 @@ void goto_program_dereferencet::dereference_rec(exprt &expr, guardt &guard)
142132
throw msg;
143133
}
144134

145-
dereference_rec(expr.op0(), guard);
135+
dereference_rec(expr.op0());
146136

147137
bool o1 = has_subexpr(expr.op1(), ID_dereference);
148138
bool o2 = has_subexpr(expr.op2(), ID_dereference);
149139

150140
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());
157142

158143
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());
165145

166146
return;
167147
}
@@ -179,7 +159,7 @@ void goto_program_dereferencet::dereference_rec(exprt &expr, guardt &guard)
179159
}
180160

181161
Forall_operands(it, expr)
182-
dereference_rec(*it, guard);
162+
dereference_rec(*it);
183163

184164
if(expr.id()==ID_dereference)
185165
{
@@ -232,15 +212,13 @@ void goto_program_dereferencet::dereference_expr(
232212
exprt &expr,
233213
const bool checks_only)
234214
{
235-
guardt guard{true_exprt{}};
236-
237215
if(checks_only)
238216
{
239217
exprt tmp(expr);
240-
dereference_rec(tmp, guard);
218+
dereference_rec(tmp);
241219
}
242220
else
243-
dereference_rec(expr, guard);
221+
dereference_rec(expr);
244222
}
245223

246224
void goto_program_dereferencet::dereference_program(

src/pointer-analysis/goto_program_dereference.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ class goto_program_dereferencet:protected dereference_callbackt
8787
bool checks_only=false);
8888

8989
protected:
90-
void dereference_rec(exprt &expr, guardt &guard);
90+
void dereference_rec(exprt &expr);
9191
void dereference_expr(exprt &expr, const bool checks_only);
9292

9393
#if 0

0 commit comments

Comments
 (0)