File tree Expand file tree Collapse file tree 3 files changed +31
-3
lines changed Expand file tree Collapse file tree 3 files changed +31
-3
lines changed Original file line number Diff line number Diff line change @@ -221,12 +221,12 @@ void rw_range_sett::get_objects_member(
221
221
222
222
const struct_typet &struct_type=to_struct_type (type);
223
223
224
- // TODO - assumes members are byte-aligned
225
224
range_spect offset=
226
- to_range_spect (member_offset (
225
+ to_range_spect (
226
+ member_offset_bits (
227
227
struct_type,
228
228
expr.get_component_name (),
229
- ns) * 8 );
229
+ ns));
230
230
231
231
if (offset!=-1 )
232
232
offset+=range_start;
Original file line number Diff line number Diff line change @@ -80,6 +80,29 @@ mp_integer member_offset(
80
80
return offsets->second ;
81
81
}
82
82
83
+ mp_integer member_offset_bits (
84
+ const struct_typet &type,
85
+ const irep_idt &member,
86
+ const namespacet &ns)
87
+ {
88
+ mp_integer offset=0 ;
89
+ const struct_typet::componentst &components=type.components ();
90
+
91
+ for (const auto &comp : components)
92
+ {
93
+ if (comp.get_name ()==member)
94
+ break ;
95
+
96
+ mp_integer member_bits=pointer_offset_bits (comp.type (), ns);
97
+ if (member_bits==-1 )
98
+ return member_bits;
99
+
100
+ offset+=member_bits;
101
+ }
102
+
103
+ return offset;
104
+ }
105
+
83
106
mp_integer pointer_offset_size (
84
107
const typet &type,
85
108
const namespacet &ns)
Original file line number Diff line number Diff line change @@ -45,6 +45,11 @@ mp_integer member_offset(
45
45
const irep_idt &member,
46
46
const namespacet &ns);
47
47
48
+ mp_integer member_offset_bits (
49
+ const struct_typet &type,
50
+ const irep_idt &member,
51
+ const namespacet &ns);
52
+
48
53
mp_integer pointer_offset_size (
49
54
const typet &type,
50
55
const namespacet &ns);
You can’t perform that action at this time.
0 commit comments