Skip to content

Commit ed79565

Browse files
committed
member_offset_bits: express member offset in bits instead of bytes
1 parent 05e2d51 commit ed79565

File tree

3 files changed

+43
-3
lines changed

3 files changed

+43
-3
lines changed

src/analyses/goto_rw.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff 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;

src/util/pointer_offset_size.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff 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+
93128
Function: pointer_offset_size
94129
95130
Inputs:

src/util/pointer_offset_size.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff 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+
4550
mp_integer pointer_offset_size(
4651
const typet &type,
4752
const namespacet &ns);

0 commit comments

Comments
 (0)