summaryrefslogtreecommitdiff
path: root/src/codegen/mod.rs
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2017-11-13 08:48:56 -0600
committerGitHub <noreply@github.com>2017-11-13 08:48:56 -0600
commitbf3f75bdcc2624c73a93fda4f7904bf165f94d6c (patch)
treeaefa07a249f0fb03043c42101bcdcb5c0b2b095b /src/codegen/mod.rs
parent433e9c050b2f5fd45a476a818f035b17b38f6b15 (diff)
parente22d7dad24eecb336bce2e84d4206e61794baf47 (diff)
Auto merge of #1149 - glyn:avoid-accesses-outside-self, r=emilio
Avoid bitfield getters and setters accessing memory beyond "self" This fixes https://github.com/rust-lang-nursery/rust-bindgen/issues/954. r? @emilio
Diffstat (limited to 'src/codegen/mod.rs')
-rw-r--r--src/codegen/mod.rs14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs
index 50de296e..f0a7e0be 100644
--- a/src/codegen/mod.rs
+++ b/src/codegen/mod.rs
@@ -1201,7 +1201,7 @@ impl<'a> FieldCodegen<'a> for BitfieldUnit {
1 => quote! { u8 },
size => {
debug_assert!(size > 8);
- // Can't generate bitfield accessors for unit sizes larget than
+ // Can't generate bitfield accessors for unit sizes larger than
// 64 bits at the moment.
struct_layout.saw_bitfield_unit(self.layout());
return;
@@ -1227,7 +1227,7 @@ impl<'a> FieldCodegen<'a> for BitfieldUnit {
struct_layout,
fields,
methods,
- (&unit_field_name, unit_field_int_ty.clone()),
+ (&unit_field_name, unit_field_int_ty.clone(), self.layout().size),
);
let param_name = bitfield_getter_name(ctx, bf);
@@ -1283,7 +1283,7 @@ fn bitfield_setter_name(
}
impl<'a> FieldCodegen<'a> for Bitfield {
- type Extra = (&'a str, quote::Tokens);
+ type Extra = (&'a str, quote::Tokens, usize);
fn codegen<F, M>(
&self,
@@ -1296,7 +1296,7 @@ impl<'a> FieldCodegen<'a> for Bitfield {
_struct_layout: &mut StructLayoutTracker,
_fields: &mut F,
methods: &mut M,
- (unit_field_name, unit_field_int_ty): (&'a str, quote::Tokens),
+ (unit_field_name, unit_field_int_ty, unit_field_size): (&'a str, quote::Tokens, usize),
) where
F: Extend<quote::Tokens>,
M: Extend<quote::Tokens>,
@@ -1331,7 +1331,7 @@ impl<'a> FieldCodegen<'a> for Bitfield {
::#prefix::ptr::copy_nonoverlapping(
&self.#unit_field_ident as *const _ as *const u8,
&mut unit_field_val as *mut #unit_field_int_ty as *mut u8,
- ::#prefix::mem::size_of::<#unit_field_int_ty>(),
+ #unit_field_size,
)
};
@@ -1355,7 +1355,7 @@ impl<'a> FieldCodegen<'a> for Bitfield {
::#prefix::ptr::copy_nonoverlapping(
&self.#unit_field_ident as *const _ as *const u8,
&mut unit_field_val as *mut #unit_field_int_ty as *mut u8,
- ::#prefix::mem::size_of::< #unit_field_int_ty >(),
+ #unit_field_size,
)
};
@@ -1366,7 +1366,7 @@ impl<'a> FieldCodegen<'a> for Bitfield {
::#prefix::ptr::copy_nonoverlapping(
&unit_field_val as *const _ as *const u8,
&mut self.#unit_field_ident as *mut _ as *mut u8,
- ::#prefix::mem::size_of::< #unit_field_int_ty >(),
+ #unit_field_size,
);
}
}