@@ -872,7 +872,8 @@ fn should_encode_span(def_kind: DefKind) -> bool {
872872 | DefKind :: OpaqueTy
873873 | DefKind :: Field
874874 | DefKind :: Impl { .. }
875- | DefKind :: Closure => true ,
875+ | DefKind :: Closure
876+ | DefKind :: SyntheticCoroutineBody => true ,
876877 DefKind :: ForeignMod | DefKind :: GlobalAsm => false ,
877878 }
878879}
@@ -902,6 +903,7 @@ fn should_encode_attrs(def_kind: DefKind) -> bool {
902903 // https://github.com/model-checking/kani and is not a performance
903904 // or maintenance issue for us.
904905 DefKind :: Closure => true ,
906+ DefKind :: SyntheticCoroutineBody => false ,
905907 DefKind :: TyParam
906908 | DefKind :: ConstParam
907909 | DefKind :: Ctor ( ..)
@@ -948,7 +950,8 @@ fn should_encode_expn_that_defined(def_kind: DefKind) -> bool {
948950 | DefKind :: Field
949951 | DefKind :: LifetimeParam
950952 | DefKind :: GlobalAsm
951- | DefKind :: Closure => false ,
953+ | DefKind :: Closure
954+ | DefKind :: SyntheticCoroutineBody => false ,
952955 }
953956}
954957
@@ -984,7 +987,8 @@ fn should_encode_visibility(def_kind: DefKind) -> bool {
984987 | DefKind :: GlobalAsm
985988 | DefKind :: Impl { .. }
986989 | DefKind :: Closure
987- | DefKind :: ExternCrate => false ,
990+ | DefKind :: ExternCrate
991+ | DefKind :: SyntheticCoroutineBody => false ,
988992 }
989993}
990994
@@ -1019,7 +1023,8 @@ fn should_encode_stability(def_kind: DefKind) -> bool {
10191023 | DefKind :: InlineConst
10201024 | DefKind :: GlobalAsm
10211025 | DefKind :: Closure
1022- | DefKind :: ExternCrate => false ,
1026+ | DefKind :: ExternCrate
1027+ | DefKind :: SyntheticCoroutineBody => false ,
10231028 }
10241029}
10251030
@@ -1061,6 +1066,8 @@ fn should_encode_mir(
10611066 }
10621067 // Coroutines require optimized MIR to compute layout.
10631068 DefKind :: Closure if tcx. is_coroutine ( def_id. to_def_id ( ) ) => ( false , true ) ,
1069+ // FIXME: lol
1070+ DefKind :: SyntheticCoroutineBody => ( false , true ) ,
10641071 // Full-fledged functions + closures
10651072 DefKind :: AssocFn | DefKind :: Fn | DefKind :: Closure => {
10661073 let generics = tcx. generics_of ( def_id) ;
@@ -1109,7 +1116,8 @@ fn should_encode_variances<'tcx>(tcx: TyCtxt<'tcx>, def_id: DefId, def_kind: Def
11091116 | DefKind :: InlineConst
11101117 | DefKind :: GlobalAsm
11111118 | DefKind :: Closure
1112- | DefKind :: ExternCrate => false ,
1119+ | DefKind :: ExternCrate
1120+ | DefKind :: SyntheticCoroutineBody => false ,
11131121 DefKind :: TyAlias => tcx. type_alias_is_lazy ( def_id) ,
11141122 }
11151123}
@@ -1137,7 +1145,8 @@ fn should_encode_generics(def_kind: DefKind) -> bool {
11371145 | DefKind :: Impl { .. }
11381146 | DefKind :: Field
11391147 | DefKind :: TyParam
1140- | DefKind :: Closure => true ,
1148+ | DefKind :: Closure
1149+ | DefKind :: SyntheticCoroutineBody => true ,
11411150 DefKind :: Mod
11421151 | DefKind :: ForeignMod
11431152 | DefKind :: ConstParam
@@ -1168,7 +1177,8 @@ fn should_encode_type(tcx: TyCtxt<'_>, def_id: LocalDefId, def_kind: DefKind) ->
11681177 | DefKind :: Closure
11691178 | DefKind :: ConstParam
11701179 | DefKind :: AnonConst
1171- | DefKind :: InlineConst => true ,
1180+ | DefKind :: InlineConst
1181+ | DefKind :: SyntheticCoroutineBody => true ,
11721182
11731183 DefKind :: OpaqueTy => {
11741184 let origin = tcx. opaque_type_origin ( def_id) ;
@@ -1240,7 +1250,8 @@ fn should_encode_fn_sig(def_kind: DefKind) -> bool {
12401250 | DefKind :: Use
12411251 | DefKind :: LifetimeParam
12421252 | DefKind :: GlobalAsm
1243- | DefKind :: ExternCrate => false ,
1253+ | DefKind :: ExternCrate
1254+ | DefKind :: SyntheticCoroutineBody => false ,
12441255 }
12451256}
12461257
@@ -1277,7 +1288,8 @@ fn should_encode_constness(def_kind: DefKind) -> bool {
12771288 | DefKind :: Use
12781289 | DefKind :: LifetimeParam
12791290 | DefKind :: GlobalAsm
1280- | DefKind :: ExternCrate => false ,
1291+ | DefKind :: ExternCrate
1292+ | DefKind :: SyntheticCoroutineBody => false ,
12811293 }
12821294}
12831295
@@ -1310,7 +1322,8 @@ fn should_encode_const(def_kind: DefKind) -> bool {
13101322 | DefKind :: Use
13111323 | DefKind :: LifetimeParam
13121324 | DefKind :: GlobalAsm
1313- | DefKind :: ExternCrate => false ,
1325+ | DefKind :: ExternCrate
1326+ | DefKind :: SyntheticCoroutineBody => false ,
13141327 }
13151328}
13161329
@@ -1366,6 +1379,10 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
13661379 let def_span = tcx. def_span ( local_id) ;
13671380 record ! ( self . tables. def_span[ def_id] <- def_span) ;
13681381 }
1382+ // FIXME(async_closures): We should just use `tcx.attrs` rather than going
1383+ // through the HIR. Historically, though, this has been inefficient apparently.
1384+ // For now, it's kind of pointless to fix, because coroutine-closures' coroutine
1385+ // bodies have no attrs anyways.
13691386 if should_encode_attrs ( def_kind) {
13701387 self . encode_attrs ( local_id) ;
13711388 }
@@ -1458,7 +1475,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
14581475 record ! ( self . tables. associated_type_for_effects[ def_id] <- assoc_def_id) ;
14591476 }
14601477 }
1461- if def_kind == DefKind :: Closure
1478+ if let DefKind :: Closure | DefKind :: SyntheticCoroutineBody = def_kind
14621479 && let Some ( coroutine_kind) = self . tcx . coroutine_kind ( def_id)
14631480 {
14641481 self . tables . coroutine_kind . set ( def_id. index , Some ( coroutine_kind) )
0 commit comments