summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/codegen/mod.rs11
-rw-r--r--src/codegen/struct_layout.rs13
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 {