Skip to content

Commit 75bdd63

Browse files
author
Daniel Kroening
authored
Merge pull request diffblue#1332 from tautschnig/member_offset_bits
member_offset_bits: express member offset in bits instead of bytes
2 parents 3fdcae4 + 8555871 commit 75bdd63

File tree

3 files changed

+31
-3
lines changed

3 files changed

+31
-3
lines changed

src/analyses/goto_rw.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -221,12 +221,12 @@ void rw_range_sett::get_objects_member(
221221

222222
const struct_typet &struct_type=to_struct_type(type);
223223

224-
// TODO - assumes members are byte-aligned
225224
range_spect offset=
226-
to_range_spect(member_offset(
225+
to_range_spect(
226+
member_offset_bits(
227227
struct_type,
228228
expr.get_component_name(),
229-
ns) * 8);
229+
ns));
230230

231231
if(offset!=-1)
232232
offset+=range_start;

src/util/pointer_offset_size.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,29 @@ mp_integer member_offset(
8080
return offsets->second;
8181
}
8282

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+
83106
mp_integer pointer_offset_size(
84107
const typet &type,
85108
const namespacet &ns)

src/util/pointer_offset_size.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ mp_integer member_offset(
4545
const irep_idt &member,
4646
const namespacet &ns);
4747

48+
mp_integer member_offset_bits(
49+
const struct_typet &type,
50+
const irep_idt &member,
51+
const namespacet &ns);
52+
4853
mp_integer pointer_offset_size(
4954
const typet &type,
5055
const namespacet &ns);

0 commit comments

Comments
 (0)