@@ -393,8 +393,9 @@ where
393
393
let dl = & self . tcx . data_layout ;
394
394
Ok ( ( 0 ..len) . map ( move |i| {
395
395
let ptr = base. ptr . ptr_offset ( i * stride, dl) ?;
396
+ let align = base. align . restrict_for_offset ( i * stride) ;
396
397
Ok ( MPlaceTy {
397
- mplace : MemPlace { ptr, align : base . align , meta : None } ,
398
+ mplace : MemPlace { ptr, align, meta : None } ,
398
399
layout
399
400
} )
400
401
} ) )
@@ -417,6 +418,7 @@ where
417
418
_ => bug ! ( "Unexpected layout of index access: {:#?}" , base. layout) ,
418
419
} ;
419
420
let ptr = base. ptr . ptr_offset ( from_offset, self ) ?;
421
+ let align = base. align . restrict_for_offset ( from_offset) ;
420
422
421
423
// Compute meta and new layout
422
424
let inner_len = len - to - from;
@@ -435,7 +437,7 @@ where
435
437
let layout = self . layout_of ( ty) ?;
436
438
437
439
Ok ( MPlaceTy {
438
- mplace : MemPlace { ptr, align : base . align , meta } ,
440
+ mplace : MemPlace { ptr, align, meta } ,
439
441
layout
440
442
} )
441
443
}
@@ -741,11 +743,11 @@ where
741
743
dest. layout)
742
744
} ;
743
745
let ( a_size, b_size) = ( a. size ( self ) , b. size ( self ) ) ;
744
- let b_align = b. align ( self ) . abi ;
745
- let b_offset = a_size . align_to ( b_align ) ;
746
+ let b_offset = a_size . align_to ( b. align ( self ) . abi ) ;
747
+ let b_align = ptr_align . restrict_for_offset ( b_offset ) ;
746
748
let b_ptr = ptr. offset ( b_offset, self ) ?;
747
749
748
- self . memory . check_align ( b_ptr. into ( ) , ptr_align . min ( b_align) ) ?;
750
+ self . memory . check_align ( b_ptr. into ( ) , b_align) ?;
749
751
750
752
// It is tempting to verify `b_offset` against `layout.fields.offset(1)`,
751
753
// but that does not work: We could be a newtype around a pair, then the
0 commit comments