@@ -714,6 +714,17 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> {
714
714
}
715
715
}
716
716
717
+ pub fn layout_is_packed ( & self , layout : TyLayout < ' tcx > ) -> bool {
718
+ // TODO. See https://github.com/rust-lang/rust/pull/46436
719
+ // for i in layout.fields.index_by_increasing_offset() {
720
+ // let field = layout.field(ccx, i);
721
+ // if layout.align.abi() < field.align.abi() {
722
+ // return true;
723
+ // }
724
+ // }
725
+ return false
726
+ }
727
+
717
728
/// Returns the field type and whether the field is packed
718
729
pub fn get_field_ty (
719
730
& self ,
@@ -723,7 +734,7 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> {
723
734
let layout = self . type_layout ( ty) ?. field ( self , field_index) ?;
724
735
Ok ( TyAndPacked {
725
736
ty : layout. ty ,
726
- packed : layout . is_packed ( )
737
+ packed : self . layout_is_packed ( layout )
727
738
} )
728
739
}
729
740
@@ -1087,25 +1098,25 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> {
1087
1098
ty : Ty < ' tcx >
1088
1099
) -> EvalResult < ' tcx > {
1089
1100
let mut layout = self . type_layout ( ty) ?;
1090
- let mut _packed = layout . is_packed ( ) ;
1101
+ let mut _packed = self . layout_is_packed ( layout ) ;
1091
1102
1092
1103
// er, this is kinda fishy
1093
1104
while layout. fields . count ( ) != 2
1094
1105
|| layout. field ( & self , 0 ) ?. size . bytes ( ) == 0
1095
1106
|| layout. field ( & self , 1 ) ?. size . bytes ( ) == 0 {
1096
1107
layout = layout. field ( & self , 0 ) ?;
1097
- _packed |= layout . is_packed ( ) ;
1108
+ _packed |= self . layout_is_packed ( layout ) ;
1098
1109
}
1099
1110
1100
1111
assert_eq ! ( layout. fields. count( ) , 2 ) ;
1101
1112
let field_0 = layout. field ( & self , 0 ) ?;
1102
1113
let field_1 = layout. field ( & self , 1 ) ?;
1103
- assert_eq ! (
1104
- field_0. is_packed( ) ,
1105
- field_1. is_packed( ) ,
1106
- "the two fields must agree on being packed"
1107
- ) ;
1108
- _packed |= field_0. is_packed ( ) ;
1114
+ // assert_eq!(
1115
+ // field_0.is_packed(),
1116
+ // field_1.is_packed(),
1117
+ // "the two fields must agree on being packed"
1118
+ // );
1119
+ // _packed |= field_0.is_packed();
1109
1120
let field_0_ptr = ptr. offset ( layout. fields . offset ( 0 ) . bytes ( ) , ( & self ) . data_layout ( ) ) ?. into ( ) ;
1110
1121
let field_1_ptr = ptr. offset ( layout. fields . offset ( 1 ) . bytes ( ) , ( & self ) . data_layout ( ) ) ?. into ( ) ;
1111
1122
0 commit comments