1+ #![ allow( unused) ]
12use std:: fmt:: Debug ;
23use std:: iter;
34
@@ -31,6 +32,7 @@ use crate::errors::{
3132 MultipleArrayFieldsSimdType , NonPrimitiveSimdType , OversizedSimdType , ZeroLengthSimdType ,
3233} ;
3334
35+ mod coroutine;
3436mod invariant;
3537
3638pub ( crate ) fn provide ( providers : & mut Providers ) {
@@ -427,7 +429,13 @@ fn layout_of_uncached<'tcx>(
427429 tcx. mk_layout ( unit)
428430 }
429431
430- ty:: Coroutine ( def_id, args) => coroutine_layout ( cx, ty, def_id, args) ?,
432+ ty:: Coroutine ( def_id, args) => {
433+ // if tcx.features().coroutine_new_layout() {
434+ coroutine:: coroutine_layout ( cx, ty, def_id, args) ?
435+ // } else {
436+ // coroutine_layout(cx, ty, def_id, args)?
437+ // }
438+ }
431439
432440 ty:: Closure ( _, args) => {
433441 let tys = args. as_closure ( ) . upvar_tys ( ) ;
@@ -1207,8 +1215,10 @@ fn variant_info_for_coroutine<'tcx>(
12071215 . zip_eq ( upvar_names)
12081216 . enumerate ( )
12091217 . map ( |( field_idx, ( _, name) ) | {
1210- let field_layout = layout. field ( cx, field_idx) ;
1211- let offset = layout. fields . offset ( field_idx) ;
1218+ // Upvars occupies the Unresumed variant at index zero
1219+ let variant_layout = layout. for_variant ( cx, VariantIdx :: ZERO ) ;
1220+ let field_layout = variant_layout. field ( cx, field_idx) ;
1221+ let offset = variant_layout. fields . offset ( field_idx) ;
12121222 upvars_size = upvars_size. max ( offset + field_layout. size ) ;
12131223 FieldInfo {
12141224 kind : FieldKind :: Upvar ,
@@ -1228,12 +1238,11 @@ fn variant_info_for_coroutine<'tcx>(
12281238 let variant_layout = layout. for_variant ( cx, variant_idx) ;
12291239 let mut variant_size = Size :: ZERO ;
12301240 let fields = variant_def
1231- . iter ( )
1232- . enumerate ( )
1241+ . iter_enumerated ( )
12331242 . map ( |( field_idx, local) | {
12341243 let field_name = coroutine. field_names [ * local] ;
1235- let field_layout = variant_layout. field ( cx, field_idx) ;
1236- let offset = variant_layout. fields . offset ( field_idx) ;
1244+ let field_layout = variant_layout. field ( cx, field_idx. index ( ) ) ;
1245+ let offset = variant_layout. fields . offset ( field_idx. index ( ) ) ;
12371246 // The struct is as large as the last field's end
12381247 variant_size = variant_size. max ( offset + field_layout. size ) ;
12391248 FieldInfo {
0 commit comments