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 ) {
@@ -427,7 +429,13 @@ fn layout_of_uncached<'tcx>(
427
429
tcx. mk_layout ( unit)
428
430
}
429
431
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
+ }
431
439
432
440
ty:: Closure ( _, args) => {
433
441
let tys = args. as_closure ( ) . upvar_tys ( ) ;
@@ -1207,8 +1215,10 @@ fn variant_info_for_coroutine<'tcx>(
1207
1215
. zip_eq ( upvar_names)
1208
1216
. enumerate ( )
1209
1217
. 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) ;
1212
1222
upvars_size = upvars_size. max ( offset + field_layout. size ) ;
1213
1223
FieldInfo {
1214
1224
kind : FieldKind :: Upvar ,
@@ -1228,12 +1238,11 @@ fn variant_info_for_coroutine<'tcx>(
1228
1238
let variant_layout = layout. for_variant ( cx, variant_idx) ;
1229
1239
let mut variant_size = Size :: ZERO ;
1230
1240
let fields = variant_def
1231
- . iter ( )
1232
- . enumerate ( )
1241
+ . iter_enumerated ( )
1233
1242
. map ( |( field_idx, local) | {
1234
1243
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 ( ) ) ;
1237
1246
// The struct is as large as the last field's end
1238
1247
variant_size = variant_size. max ( offset + field_layout. size ) ;
1239
1248
FieldInfo {
0 commit comments