@@ -132,31 +132,11 @@ impl<'a, 'tcx> EvalContext<'a, 'tcx> {
132
132
None => return Err ( EvalError :: InvalidDiscriminant ) ,
133
133
}
134
134
} ,
135
- Layout :: StructWrappedNullablePointer { nndiscr, .. } => {
135
+ Layout :: StructWrappedNullablePointer { .. } |
136
+ Layout :: RawNullablePointer { .. } => {
136
137
let discr = self . read_discriminant_value ( adt_ptr, ty) ?;
137
- if discr == nndiscr as u128 {
138
- assert_eq ! ( discr as usize as u128 , discr) ;
139
- & adt_def. variants [ discr as usize ] . fields
140
- } else {
141
- // FIXME: the zst variant might contain zst types that impl Drop
142
- return Ok ( ( ) ) ; // nothing to do, this is zero sized (e.g. `None`)
143
- }
144
- } ,
145
- Layout :: RawNullablePointer { nndiscr, .. } => {
146
- let discr = self . read_discriminant_value ( adt_ptr, ty) ?;
147
- if discr == nndiscr as u128 {
148
- assert_eq ! ( discr as usize as u128 , discr) ;
149
- assert_eq ! ( adt_def. variants[ discr as usize ] . fields. len( ) , 1 ) ;
150
- let field_ty = & adt_def. variants [ discr as usize ] . fields [ 0 ] ;
151
- let field_ty = monomorphize_field_ty ( self . tcx , field_ty, substs) ;
152
- // FIXME: once read_discriminant_value works with lvalue, don't force
153
- // alloc in the RawNullablePointer case
154
- self . drop ( lval, field_ty, drop) ?;
155
- return Ok ( ( ) ) ;
156
- } else {
157
- // FIXME: the zst variant might contain zst types that impl Drop
158
- return Ok ( ( ) ) ; // nothing to do, this is zero sized (e.g. `None`)
159
- }
138
+ assert_eq ! ( discr as usize as u128 , discr) ;
139
+ & adt_def. variants [ discr as usize ] . fields
160
140
} ,
161
141
Layout :: CEnum { .. } => return Ok ( ( ) ) ,
162
142
_ => bug ! ( "{:?} is not an adt layout" , layout) ,
0 commit comments