File tree Expand file tree Collapse file tree 3 files changed +43
-3
lines changed
Expand file tree Collapse file tree 3 files changed +43
-3
lines changed Original file line number Diff line number Diff line change @@ -338,12 +338,12 @@ void rw_range_sett::get_objects_member(
338338
339339 const struct_typet &struct_type=to_struct_type (type);
340340
341- // TODO - assumes members are byte-aligned
342341 range_spect offset=
343- to_range_spect (member_offset (
342+ to_range_spect (
343+ member_offset_bits (
344344 struct_type,
345345 expr.get_component_name (),
346- ns) * 8 );
346+ ns));
347347
348348 if (offset!=-1 )
349349 offset+=range_start;
Original file line number Diff line number Diff line change @@ -90,6 +90,41 @@ mp_integer member_offset(
9090
9191/* ******************************************************************\
9292
93+ Function: member_offset_bits
94+
95+ Inputs:
96+
97+ Outputs:
98+
99+ Purpose:
100+
101+ \*******************************************************************/
102+
103+ mp_integer member_offset_bits (
104+ const struct_typet &type,
105+ const irep_idt &member,
106+ const namespacet &ns)
107+ {
108+ mp_integer offset=0 ;
109+ const struct_typet::componentst &components=type.components ();
110+
111+ for (const auto &comp : components)
112+ {
113+ if (comp.get_name ()==member)
114+ break ;
115+
116+ mp_integer member_bits=pointer_offset_bits (comp.type (), ns);
117+ if (member_bits==-1 )
118+ return member_bits;
119+
120+ offset+=member_bits;
121+ }
122+
123+ return offset;
124+ }
125+
126+ /* ******************************************************************\
127+
93128Function: pointer_offset_size
94129
95130 Inputs:
Original file line number Diff line number Diff line change @@ -42,6 +42,11 @@ mp_integer member_offset(
4242 const irep_idt &member,
4343 const namespacet &ns);
4444
45+ mp_integer member_offset_bits (
46+ const struct_typet &type,
47+ const irep_idt &member,
48+ const namespacet &ns);
49+
4550mp_integer pointer_offset_size (
4651 const typet &type,
4752 const namespacet &ns);
You can’t perform that action at this time.
0 commit comments