Skip to content

Commit 2d72002

Browse files
committed
build_object_descriptor: avoid redundant typecasts
These can fool later simplifications by appearing to be non-constant.
1 parent d48e840 commit 2d72002

File tree

1 file changed

+11
-11
lines changed

1 file changed

+11
-11
lines changed

src/util/std_expr.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,11 @@ static void build_object_descriptor_rec(
7272
exprt sub_size=size_of_expr(expr.type(), ns);
7373
CHECK_RETURN(sub_size.is_not_nil());
7474

75-
dest.offset()=
76-
plus_exprt(dest.offset(),
77-
mult_exprt(typecast_exprt(index.index(), index_type()),
78-
typecast_exprt(sub_size, index_type())));
75+
dest.offset() = plus_exprt(
76+
dest.offset(),
77+
mult_exprt(
78+
typecast_exprt::conditional_cast(index.index(), index_type()),
79+
typecast_exprt::conditional_cast(sub_size, index_type())));
7980
}
8081
else if(expr.id()==ID_member)
8182
{
@@ -87,9 +88,8 @@ static void build_object_descriptor_rec(
8788
exprt offset=member_offset_expr(member, ns);
8889
CHECK_RETURN(offset.is_not_nil());
8990

90-
dest.offset()=
91-
plus_exprt(dest.offset(),
92-
typecast_exprt(offset, index_type()));
91+
dest.offset() = plus_exprt(
92+
dest.offset(), typecast_exprt::conditional_cast(offset, index_type()));
9393
}
9494
else if(expr.id()==ID_byte_extract_little_endian ||
9595
expr.id()==ID_byte_extract_big_endian)
@@ -100,10 +100,10 @@ static void build_object_descriptor_rec(
100100

101101
build_object_descriptor_rec(ns, be.op(), dest);
102102

103-
dest.offset()=
104-
plus_exprt(dest.offset(),
105-
typecast_exprt(to_byte_extract_expr(expr).offset(),
106-
index_type()));
103+
dest.offset() = plus_exprt(
104+
dest.offset(),
105+
typecast_exprt::conditional_cast(
106+
to_byte_extract_expr(expr).offset(), index_type()));
107107
}
108108
else if(expr.id()==ID_typecast)
109109
{

0 commit comments

Comments
 (0)