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 ) {
@@ -430,7 +432,13 @@ fn layout_of_uncached<'tcx>(
430432 tcx. mk_layout ( unit)
431433 }
432434
433- ty:: Coroutine ( def_id, args) => coroutine_layout ( cx, ty, def_id, args) ?,
435+ ty:: Coroutine ( def_id, args) => {
436+ // if tcx.features().coroutine_new_layout() {
437+ coroutine:: coroutine_layout ( cx, ty, def_id, args) ?
438+ // } else {
439+ // coroutine_layout(cx, ty, def_id, args)?
440+ // }
441+ }
434442
435443 ty:: Closure ( _, args) => {
436444 let tys = args. as_closure ( ) . upvar_tys ( ) ;
@@ -1216,8 +1224,10 @@ fn variant_info_for_coroutine<'tcx>(
12161224 . zip_eq ( upvar_names)
12171225 . enumerate ( )
12181226 . map ( |( field_idx, ( _, name) ) | {
1219- let field_layout = layout. field ( cx, field_idx) ;
1220- let offset = layout. fields . offset ( field_idx) ;
1227+ // Upvars occupies the Unresumed variant at index zero
1228+ let variant_layout = layout. for_variant ( cx, VariantIdx :: ZERO ) ;
1229+ let field_layout = variant_layout. field ( cx, field_idx) ;
1230+ let offset = variant_layout. fields . offset ( field_idx) ;
12211231 upvars_size = upvars_size. max ( offset + field_layout. size ) ;
12221232 FieldInfo {
12231233 kind : FieldKind :: Upvar ,
@@ -1237,12 +1247,11 @@ fn variant_info_for_coroutine<'tcx>(
12371247 let variant_layout = layout. for_variant ( cx, variant_idx) ;
12381248 let mut variant_size = Size :: ZERO ;
12391249 let fields = variant_def
1240- . iter ( )
1241- . enumerate ( )
1250+ . iter_enumerated ( )
12421251 . map ( |( field_idx, local) | {
12431252 let field_name = coroutine. field_names [ * local] ;
1244- let field_layout = variant_layout. field ( cx, field_idx) ;
1245- let offset = variant_layout. fields . offset ( field_idx) ;
1253+ let field_layout = variant_layout. field ( cx, field_idx. index ( ) ) ;
1254+ let offset = variant_layout. fields . offset ( field_idx. index ( ) ) ;
12461255 // The struct is as large as the last field's end
12471256 variant_size = variant_size. max ( offset + field_layout. size ) ;
12481257 FieldInfo {
0 commit comments