summaryrefslogtreecommitdiff
path: root/src/codegen/mod.rs
diff options
context:
space:
mode:
authorEmilio Cobos Álvarez <emilio@crisal.io>2017-06-17 23:29:05 +0200
committerEmilio Cobos Álvarez <emilio@crisal.io>2017-06-17 23:53:19 +0200
commitd8440cb4f14d9aa071f2e4bc49d802c5eac181a0 (patch)
treeb6a11fb7476a971593d1556293d789ed844e6685 /src/codegen/mod.rs
parentfbd0f81d2a3fe9ce7593cfee05a3d215b61ccb47 (diff)
ir: Correct size calculation of a bitfield unit.
Fixes #734
Diffstat (limited to 'src/codegen/mod.rs')
-rw-r--r--src/codegen/mod.rs10
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());