@@ -1051,15 +1051,16 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
1051
1051
let mut align = if pack. is_some ( ) { dl. i8_align } else { dl. aggregate_align } ;
1052
1052
let mut max_repr_align = repr. align ;
1053
1053
let mut inverse_memory_index: IndexVec < u32 , FieldIdx > = fields. indices ( ) . collect ( ) ;
1054
- let field_seed =
1055
- fields. raw . iter ( ) . fold ( 0u64 , |acc, f| acc. wrapping_add ( f. randomization_seed ) ) ;
1056
1054
let optimize_field_order = !repr. inhibit_struct_field_reordering ( ) ;
1057
- if optimize_field_order && fields. len ( ) > 1 {
1058
- let end =
1059
- if let StructKind :: MaybeUnsized = kind { fields. len ( ) - 1 } else { fields. len ( ) } ;
1060
- let optimizing = & mut inverse_memory_index. raw [ ..end] ;
1061
- let fields_excluding_tail = & fields. raw [ ..end] ;
1055
+ let end = if let StructKind :: MaybeUnsized = kind { fields. len ( ) - 1 } else { fields. len ( ) } ;
1056
+ let optimizing = & mut inverse_memory_index. raw [ ..end] ;
1057
+ let fields_excluding_tail = & fields. raw [ ..end] ;
1058
+ // unsizable tail fields are excluded so that we use the same seed for the sized and unsized layouts.
1059
+ let field_seed = fields_excluding_tail
1060
+ . iter ( )
1061
+ . fold ( 0u64 , |acc, f| acc. wrapping_add ( f. randomization_seed ) ) ;
1062
1062
1063
+ if optimize_field_order && fields. len ( ) > 1 {
1063
1064
// If `-Z randomize-layout` was enabled for the type definition we can shuffle
1064
1065
// the field ordering to try and catch some code making assumptions about layouts
1065
1066
// we don't guarantee.
@@ -1369,12 +1370,7 @@ impl<Cx: HasDataLayout> LayoutCalculator<Cx> {
1369
1370
unadjusted_abi_align
1370
1371
} ;
1371
1372
1372
- // a transparent struct only has a single field, so its seed should be the same as the one we pass forward
1373
- let seed = if repr. transparent ( ) {
1374
- field_seed
1375
- } else {
1376
- field_seed. wrapping_add ( repr. field_shuffle_seed )
1377
- } ;
1373
+ let seed = field_seed. wrapping_add ( repr. field_shuffle_seed ) ;
1378
1374
1379
1375
Ok ( LayoutData {
1380
1376
variants : Variants :: Single { index : VariantIdx :: new ( 0 ) } ,
0 commit comments