diff options
Diffstat (limited to 'src/codegen')
-rw-r--r-- | src/codegen/mod.rs | 11 | ||||
-rw-r--r-- | src/codegen/struct_layout.rs | 13 |
2 files changed, 9 insertions, 15 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs index 694157d0..616f1730 100644 --- a/src/codegen/mod.rs +++ b/src/codegen/mod.rs @@ -1612,10 +1612,13 @@ impl CodeGenerator for CompInfo { fields.push(padding_field); } - if let Some(align_field) = - layout.and_then(|layout| struct_layout.align_struct(layout)) - { - fields.push(align_field); + if let Some(layout) = layout { + if struct_layout.requires_explicit_align(layout) { + let ty = helpers::blob(Layout::new(0, layout.align)); + fields.push(quote! { + pub __bindgen_align: #ty , + }); + } } } diff --git a/src/codegen/struct_layout.rs b/src/codegen/struct_layout.rs index 06059853..c3c781cb 100644 --- a/src/codegen/struct_layout.rs +++ b/src/codegen/struct_layout.rs @@ -288,18 +288,9 @@ impl<'a> StructLayoutTracker<'a> { } } - pub fn align_struct(&self, layout: Layout) -> Option<quote::Tokens> { - if self.max_field_align < layout.align && + pub fn requires_explicit_align(&self, layout: Layout) -> bool { + self.max_field_align < layout.align && layout.align <= mem::size_of::<*mut ()>() - { - let ty = helpers::blob(Layout::new(0, layout.align)); - - Some(quote! { - pub __bindgen_align: #ty , - }) - } else { - None - } } fn padding_bytes(&self, layout: Layout) -> usize { |