Skip to content

Commit 4952606

Browse files
author
bors-servo
authored
Auto merge of rust-lang#772 - emilio:ff, r=fitzgen
codegen: Inline {read,write}_unaligned in order to support rust 1.15.
2 parents a99bbd8 + 30dc9da commit 4952606

16 files changed

+2378
-1355
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ name = "bindgen"
1313
readme = "README.md"
1414
repository = "https://github.com/servo/rust-bindgen"
1515
documentation = "https://docs.rs/bindgen"
16-
version = "0.26.0"
16+
version = "0.26.1"
1717
build = "build.rs"
1818

1919
exclude = [

src/codegen/mod.rs

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1286,12 +1286,19 @@ impl<'a> FieldCodegen<'a> for Bitfield {
12861286
impl XxxIgnored {
12871287
#[inline]
12881288
pub fn $getter_name(&self) -> $bitfield_ty {
1289-
let mask = $mask as $unit_field_int_ty;
1290-
let unit_field_val: $unit_field_int_ty = unsafe {
1291-
::$prefix::ptr::read_unaligned(
1292-
&self.$unit_field_ident as *const _ as *const $unit_field_int_ty
1289+
let mut unit_field_val: $unit_field_int_ty = unsafe {
1290+
::$prefix::mem::uninitialized()
1291+
};
1292+
1293+
unsafe {
1294+
::$prefix::ptr::copy_nonoverlapping(
1295+
&self.$unit_field_ident as *const _ as *const u8,
1296+
&mut unit_field_val as *mut $unit_field_int_ty as *mut u8,
1297+
::$prefix::mem::size_of::<$unit_field_int_ty>(),
12931298
)
12941299
};
1300+
1301+
let mask = $mask as $unit_field_int_ty;
12951302
let val = (unit_field_val & mask) >> $offset;
12961303
unsafe {
12971304
::$prefix::mem::transmute(val as $bitfield_int_ty)
@@ -1304,17 +1311,25 @@ impl<'a> FieldCodegen<'a> for Bitfield {
13041311
let val = val as $bitfield_int_ty as $unit_field_int_ty;
13051312

13061313
let mut unit_field_val: $unit_field_int_ty = unsafe {
1307-
::$prefix::ptr::read_unaligned(
1308-
&self.$unit_field_ident as *const _ as *const $unit_field_int_ty)
1314+
::$prefix::mem::uninitialized()
1315+
};
1316+
1317+
unsafe {
1318+
::$prefix::ptr::copy_nonoverlapping(
1319+
&self.$unit_field_ident as *const _ as *const u8,
1320+
&mut unit_field_val as *mut $unit_field_int_ty as *mut u8,
1321+
::$prefix::mem::size_of::<$unit_field_int_ty>(),
1322+
)
13091323
};
13101324

13111325
unit_field_val &= !mask;
13121326
unit_field_val |= (val << $offset) & mask;
13131327

13141328
unsafe {
1315-
::$prefix::ptr::write_unaligned(
1316-
&mut self.$unit_field_ident as *mut _ as *mut $unit_field_int_ty,
1317-
unit_field_val
1329+
::$prefix::ptr::copy_nonoverlapping(
1330+
&unit_field_val as *const _ as *const u8,
1331+
&mut self.$unit_field_ident as *mut _ as *mut u8,
1332+
::$prefix::mem::size_of::<$unit_field_int_ty>(),
13181333
);
13191334
}
13201335
}

0 commit comments

Comments
 (0)