Skip to content

Commit b7fe793

Browse files
committed
Fix fixme in PackedStructs.
Instead of relying testing that the size of pointers is 64bit the size of registers should be tested. Also it should be a fatal error to reverse a long long on an architecture that does not support reverse 64bit read/writes. Bug 24982
1 parent 2ac731d commit b7fe793

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

cparser/PackedStructs.ml

+4-4
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ let byteswapped_fields : (ident * string, unit) Hashtbl.t
3636

3737
let rec can_byte_swap env ty =
3838
match unroll env ty with
39-
| TInt(ik, _) -> (sizeof_ikind ik <= !config.sizeof_ptr (*FIXME*), sizeof_ikind ik > 1)
39+
| TInt(ik, _) -> (sizeof_ikind ik <= !config.sizeof_intreg, sizeof_ikind ik > 1)
4040
| TEnum(_, _) -> (true, sizeof_ikind enum_ikind > 1)
4141
| TPtr(_, _) -> (true, true) (* tolerance? *)
4242
| TArray(ty_elt, _, _) -> can_byte_swap env ty_elt
@@ -66,7 +66,7 @@ let transf_field_decl mfa swapped loc env struct_id f =
6666
if swapped then begin
6767
let (can_swap, must_swap) = can_byte_swap env f.fld_typ in
6868
if not can_swap then
69-
error loc "cannot byte-swap field of type '%a'"
69+
fatal_error loc "cannot byte-swap field of type '%a'"
7070
Cprint.typ f.fld_typ;
7171
if must_swap then
7272
Hashtbl.add byteswapped_fields (struct_id, f.fld_name) ()
@@ -141,7 +141,7 @@ let use_reversed = ref false
141141
let bswap_read loc env lval =
142142
let ty = lval.etyp in
143143
let (bsize, aty) = accessor_type loc env ty in
144-
assert (bsize = 16 || bsize = 32 || (bsize = 64 && !config.sizeof_ptr = 8));
144+
assert (bsize = 16 || bsize = 32 || (bsize = 64 && !config.sizeof_intreg = 8));
145145
try
146146
if !use_reversed then begin
147147
let (id, fty) =
@@ -168,7 +168,7 @@ let bswap_write loc env lhs rhs =
168168
let ty = lhs.etyp in
169169
let (bsize, aty) =
170170
accessor_type loc env ty in
171-
assert (bsize = 16 || bsize = 32 || (bsize = 64 && !config.sizeof_ptr = 8));
171+
assert (bsize = 16 || bsize = 32 || (bsize = 64 && !config.sizeof_intreg = 8));
172172
try
173173
if !use_reversed then begin
174174
let (id, fty) =

0 commit comments

Comments
 (0)