16
16
#include " expr_util.h"
17
17
#include " mathematical_types.h"
18
18
#include " pointer_offset_size.h"
19
+ #include " simplify_expr.h"
19
20
20
21
bool constant_exprt::value_is_zero_string () const
21
22
{
@@ -72,10 +73,11 @@ static void build_object_descriptor_rec(
72
73
exprt sub_size=size_of_expr (expr.type (), ns);
73
74
CHECK_RETURN (sub_size.is_not_nil ());
74
75
75
- dest.offset ()=
76
- plus_exprt (dest.offset (),
77
- mult_exprt (typecast_exprt (index .index (), index_type ()),
78
- typecast_exprt (sub_size, index_type ())));
76
+ dest.offset () = plus_exprt (
77
+ dest.offset (),
78
+ mult_exprt (
79
+ typecast_exprt::conditional_cast (index .index (), index_type ()),
80
+ typecast_exprt::conditional_cast (sub_size, index_type ())));
79
81
}
80
82
else if (expr.id ()==ID_member)
81
83
{
@@ -87,9 +89,8 @@ static void build_object_descriptor_rec(
87
89
exprt offset=member_offset_expr (member, ns);
88
90
CHECK_RETURN (offset.is_not_nil ());
89
91
90
- dest.offset ()=
91
- plus_exprt (dest.offset (),
92
- typecast_exprt (offset, index_type ()));
92
+ dest.offset () = plus_exprt (
93
+ dest.offset (), typecast_exprt::conditional_cast (offset, index_type ()));
93
94
}
94
95
else if (expr.id ()==ID_byte_extract_little_endian ||
95
96
expr.id ()==ID_byte_extract_big_endian)
@@ -100,10 +101,10 @@ static void build_object_descriptor_rec(
100
101
101
102
build_object_descriptor_rec (ns, be.op (), dest);
102
103
103
- dest.offset ()=
104
- plus_exprt ( dest.offset (),
105
- typecast_exprt ( to_byte_extract_expr (expr). offset (),
106
- index_type ()));
104
+ dest.offset () = plus_exprt (
105
+ dest.offset (),
106
+ typecast_exprt::conditional_cast (
107
+ to_byte_extract_expr (expr). offset (), index_type ()));
107
108
}
108
109
else if (expr.id ()==ID_typecast)
109
110
{
@@ -145,6 +146,7 @@ void object_descriptor_exprt::build(
145
146
offset ()=from_integer (0 , index_type ());
146
147
147
148
build_object_descriptor_rec (ns, expr, *this );
149
+ simplify (offset (), ns);
148
150
}
149
151
150
152
shift_exprt::shift_exprt (
0 commit comments