1
+ #![ allow( unused) ]
1
2
use std:: fmt:: Debug ;
2
3
use std:: iter;
3
4
@@ -31,6 +32,7 @@ use crate::errors::{
31
32
MultipleArrayFieldsSimdType , NonPrimitiveSimdType , OversizedSimdType , ZeroLengthSimdType ,
32
33
} ;
33
34
35
+ mod coroutine;
34
36
mod invariant;
35
37
36
38
pub ( crate ) fn provide ( providers : & mut Providers ) {
@@ -430,7 +432,13 @@ fn layout_of_uncached<'tcx>(
430
432
tcx. mk_layout ( unit)
431
433
}
432
434
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
+ }
434
442
435
443
ty:: Closure ( _, args) => {
436
444
let tys = args. as_closure ( ) . upvar_tys ( ) ;
@@ -1216,8 +1224,10 @@ fn variant_info_for_coroutine<'tcx>(
1216
1224
. zip_eq ( upvar_names)
1217
1225
. enumerate ( )
1218
1226
. 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) ;
1221
1231
upvars_size = upvars_size. max ( offset + field_layout. size ) ;
1222
1232
FieldInfo {
1223
1233
kind : FieldKind :: Upvar ,
@@ -1237,12 +1247,11 @@ fn variant_info_for_coroutine<'tcx>(
1237
1247
let variant_layout = layout. for_variant ( cx, variant_idx) ;
1238
1248
let mut variant_size = Size :: ZERO ;
1239
1249
let fields = variant_def
1240
- . iter ( )
1241
- . enumerate ( )
1250
+ . iter_enumerated ( )
1242
1251
. map ( |( field_idx, local) | {
1243
1252
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 ( ) ) ;
1246
1255
// The struct is as large as the last field's end
1247
1256
variant_size = variant_size. max ( offset + field_layout. size ) ;
1248
1257
FieldInfo {
0 commit comments