diff options
author | Emilio Cobos Álvarez <emilio@crisal.io> | 2017-06-17 23:29:05 +0200 |
---|---|---|
committer | Emilio Cobos Álvarez <emilio@crisal.io> | 2017-06-17 23:53:19 +0200 |
commit | d8440cb4f14d9aa071f2e4bc49d802c5eac181a0 (patch) | |
tree | b6a11fb7476a971593d1556293d789ed844e6685 /src/codegen/mod.rs | |
parent | fbd0f81d2a3fe9ce7593cfee05a3d215b61ccb47 (diff) |
ir: Correct size calculation of a bitfield unit.
Fixes #734
Diffstat (limited to 'src/codegen/mod.rs')
-rw-r--r-- | src/codegen/mod.rs | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs index 4cc41214..856ceb18 100644 --- a/src/codegen/mod.rs +++ b/src/codegen/mod.rs @@ -1147,12 +1147,18 @@ impl<'a> FieldCodegen<'a> for BitfieldUnit { .build_ty(field_ty.clone()); fields.extend(Some(field)); - let unit_field_int_ty = match self.layout().size { + let mut field_int_size = self.layout().size; + if !field_int_size.is_power_of_two() { + field_int_size = field_int_size.next_power_of_two(); + } + + let unit_field_int_ty = match field_int_size { 8 => quote_ty!(ctx.ext_cx(), u64), 4 => quote_ty!(ctx.ext_cx(), u32), 2 => quote_ty!(ctx.ext_cx(), u16), 1 => quote_ty!(ctx.ext_cx(), u8), - _ => { + size => { + debug_assert!(size > 8); // Can't generate bitfield accessors for unit sizes larget than // 64 bits at the moment. struct_layout.saw_bitfield_unit(self.layout()); |