@@ -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