Skip to content

Commit 03c1b41

Browse files
committed
Do not require a constant member offset when building a byte-extract expression
1 parent 46a10b4 commit 03c1b41

File tree

1 file changed

+4
-9
lines changed

1 file changed

+4
-9
lines changed

src/util/std_expr.cpp

+4-9
Original file line numberDiff line numberDiff line change
@@ -125,20 +125,15 @@ static void build_object_descriptor_rec(
125125
{
126126
const member_exprt &member=to_member_expr(expr);
127127
const exprt &struct_op=member.struct_op();
128-
const typet &struct_type=ns.follow(struct_op.type());
129128

130129
build_object_descriptor_rec(ns, struct_op, dest);
131130

132-
if(struct_type.id()==ID_union)
133-
return;
134-
135-
mp_integer offset=
136-
member_offset(to_struct_type(struct_type),
137-
member.get_component_name(), ns);
138-
assert(offset>=0);
131+
exprt offset=member_offset_expr(member, ns);
132+
assert(offset.is_not_nil());
139133

140134
dest.offset()=
141-
plus_exprt(dest.offset(), from_integer(offset, index_type));
135+
plus_exprt(dest.offset(),
136+
typecast_exprt(offset, index_type));
142137
}
143138
else if(expr.id()==ID_byte_extract_little_endian ||
144139
expr.id()==ID_byte_extract_big_endian)

0 commit comments

Comments
 (0)