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 ) {
@@ -397,7 +399,13 @@ fn layout_of_uncached<'tcx>(
397399 tcx. mk_layout ( unit)
398400 }
399401
400- ty:: Coroutine ( def_id, args) => coroutine_layout ( cx, ty, def_id, args) ?,
402+ ty:: Coroutine ( def_id, args) => {
403+ // if tcx.features().coroutine_new_layout() {
404+ coroutine:: coroutine_layout ( cx, ty, def_id, args) ?
405+ // } else {
406+ // coroutine_layout(cx, ty, def_id, args)?
407+ // }
408+ }
401409
402410 ty:: Closure ( _, args) => {
403411 let tys = args. as_closure ( ) . upvar_tys ( ) ;
@@ -1168,8 +1176,10 @@ fn variant_info_for_coroutine<'tcx>(
11681176 . zip_eq ( upvar_names)
11691177 . enumerate ( )
11701178 . map ( |( field_idx, ( _, name) ) | {
1171- let field_layout = layout. field ( cx, field_idx) ;
1172- let offset = layout. fields . offset ( field_idx) ;
1179+ // Upvars occupies the Unresumed variant at index zero
1180+ let variant_layout = layout. for_variant ( cx, VariantIdx :: ZERO ) ;
1181+ let field_layout = variant_layout. field ( cx, field_idx) ;
1182+ let offset = variant_layout. fields . offset ( field_idx) ;
11731183 upvars_size = upvars_size. max ( offset + field_layout. size ) ;
11741184 FieldInfo {
11751185 kind : FieldKind :: Upvar ,
@@ -1189,12 +1199,11 @@ fn variant_info_for_coroutine<'tcx>(
11891199 let variant_layout = layout. for_variant ( cx, variant_idx) ;
11901200 let mut variant_size = Size :: ZERO ;
11911201 let fields = variant_def
1192- . iter ( )
1193- . enumerate ( )
1202+ . iter_enumerated ( )
11941203 . map ( |( field_idx, local) | {
11951204 let field_name = coroutine. field_names [ * local] ;
1196- let field_layout = variant_layout. field ( cx, field_idx) ;
1197- let offset = variant_layout. fields . offset ( field_idx) ;
1205+ let field_layout = variant_layout. field ( cx, field_idx. index ( ) ) ;
1206+ let offset = variant_layout. fields . offset ( field_idx. index ( ) ) ;
11981207 // The struct is as large as the last field's end
11991208 variant_size = variant_size. max ( offset + field_layout. size ) ;
12001209 FieldInfo {
0 commit comments