Skip to content

Commit e8a1ae4

Browse files
committed
type simplify_member
This improves memory safety.
1 parent 94192b1 commit e8a1ae4

File tree

3 files changed

+8
-10
lines changed

3 files changed

+8
-10
lines changed

src/util/simplify_expr.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2126,7 +2126,7 @@ bool simplify_exprt::simplify_node(exprt &expr)
21262126
}
21272127
else if(expr.id()==ID_member)
21282128
{
2129-
r = simplify_member(expr);
2129+
r = simplify_member(to_member_expr(expr));
21302130
}
21312131
else if(expr.id()==ID_byte_update_little_endian ||
21322132
expr.id()==ID_byte_update_big_endian)

src/util/simplify_expr_class.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ class simplify_exprt
158158
NODISCARD resultt<> simplify_with(const exprt &);
159159
NODISCARD resultt<> simplify_update(const exprt &);
160160
NODISCARD resultt<> simplify_index(const index_exprt &);
161-
NODISCARD resultt<> simplify_member(const exprt &);
161+
NODISCARD resultt<> simplify_member(const member_exprt &);
162162
NODISCARD resultt<> simplify_byte_update(const byte_update_exprt &);
163163
NODISCARD resultt<> simplify_byte_extract(const byte_extract_exprt &);
164164
NODISCARD resultt<> simplify_pointer_object(const exprt &);

src/util/simplify_expr_struct.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,13 @@ Author: Daniel Kroening, [email protected]
1515
#include "pointer_offset_size.h"
1616
#include "std_expr.h"
1717

18-
simplify_exprt::resultt<> simplify_exprt::simplify_member(const exprt &expr)
18+
simplify_exprt::resultt<>
19+
simplify_exprt::simplify_member(const member_exprt &expr)
1920
{
20-
if(expr.operands().size()!=1)
21-
return unchanged(expr);
22-
2321
const irep_idt &component_name=
2422
to_member_expr(expr).get_component_name();
2523

26-
const exprt &op = expr.op0();
24+
const exprt &op = expr.struct_op();
2725
const typet &op_type=ns.follow(op.type());
2826

2927
if(op.id()==ID_with)
@@ -60,7 +58,7 @@ simplify_exprt::resultt<> simplify_exprt::simplify_member(const exprt &expr)
6058
DATA_INVARIANT(new_operands.size() == 1, "post-condition of loop");
6159

6260
auto new_member_expr = expr;
63-
new_member_expr.op0() = new_operands.front();
61+
new_member_expr.struct_op() = new_operands.front();
6462
// do this recursively
6563
return simplify_member(new_member_expr);
6664
}
@@ -104,7 +102,7 @@ simplify_exprt::resultt<> simplify_exprt::simplify_member(const exprt &expr)
104102
{
105103
// UPDATE(s, .m1, v).m2 -> s.m2
106104
auto new_expr = expr;
107-
new_expr.op0() = update_expr.old();
105+
new_expr.struct_op() = update_expr.old();
108106

109107
// do this recursively
110108
return changed(simplify_rec(new_expr));
@@ -211,7 +209,7 @@ simplify_exprt::resultt<> simplify_exprt::simplify_member(const exprt &expr)
211209
if(op_type == op.op0().type())
212210
{
213211
auto new_expr = expr;
214-
new_expr.op0() = op.op0();
212+
new_expr.struct_op() = op.op0();
215213
return simplify_member(new_expr);
216214
}
217215

0 commit comments

Comments
 (0)