File tree Expand file tree Collapse file tree 3 files changed +40
-5
lines changed Expand file tree Collapse file tree 3 files changed +40
-5
lines changed Original file line number Diff line number Diff line change @@ -440,6 +440,43 @@ impl DefKind {
440
440
| DefKind :: ExternCrate => false ,
441
441
}
442
442
}
443
+
444
+ /// Returns `true` if `self` is a kind of definition that does not have its own
445
+ /// type-checking context, i.e. closure, coroutine or inline const.
446
+ #[ inline]
447
+ pub fn is_typeck_child ( self ) -> bool {
448
+ match self {
449
+ DefKind :: Closure | DefKind :: InlineConst | DefKind :: SyntheticCoroutineBody => true ,
450
+ DefKind :: Mod
451
+ | DefKind :: Struct
452
+ | DefKind :: Union
453
+ | DefKind :: Enum
454
+ | DefKind :: Variant
455
+ | DefKind :: Trait
456
+ | DefKind :: TyAlias
457
+ | DefKind :: ForeignTy
458
+ | DefKind :: TraitAlias
459
+ | DefKind :: AssocTy
460
+ | DefKind :: TyParam
461
+ | DefKind :: Fn
462
+ | DefKind :: Const
463
+ | DefKind :: ConstParam
464
+ | DefKind :: Static { .. }
465
+ | DefKind :: Ctor ( _, _)
466
+ | DefKind :: AssocFn
467
+ | DefKind :: AssocConst
468
+ | DefKind :: Macro ( _)
469
+ | DefKind :: ExternCrate
470
+ | DefKind :: Use
471
+ | DefKind :: ForeignMod
472
+ | DefKind :: AnonConst
473
+ | DefKind :: OpaqueTy
474
+ | DefKind :: Field
475
+ | DefKind :: LifetimeParam
476
+ | DefKind :: GlobalAsm
477
+ | DefKind :: Impl { .. } => false ,
478
+ }
479
+ }
443
480
}
444
481
445
482
/// The resolution of a path or export.
Original file line number Diff line number Diff line change @@ -238,7 +238,8 @@ pub fn check_crate(tcx: TyCtxt<'_>) {
238
238
_ => ( ) ,
239
239
}
240
240
// Skip `AnonConst`s because we feed their `type_of`.
241
- if !matches ! ( def_kind, DefKind :: AnonConst ) {
241
+ // Also skip items for which typeck forwards to parent typeck.
242
+ if !( matches ! ( def_kind, DefKind :: AnonConst ) || def_kind. is_typeck_child ( ) ) {
242
243
tcx. ensure_ok ( ) . typeck ( item_def_id) ;
243
244
}
244
245
// Ensure we generate the new `DefId` before finishing `check_crate`.
Original file line number Diff line number Diff line change @@ -608,10 +608,7 @@ impl<'tcx> TyCtxt<'tcx> {
608
608
/// Returns `true` if `def_id` refers to a definition that does not have its own
609
609
/// type-checking context, i.e. closure, coroutine or inline const.
610
610
pub fn is_typeck_child ( self , def_id : DefId ) -> bool {
611
- matches ! (
612
- self . def_kind( def_id) ,
613
- DefKind :: Closure | DefKind :: InlineConst | DefKind :: SyntheticCoroutineBody
614
- )
611
+ self . def_kind ( def_id) . is_typeck_child ( )
615
612
}
616
613
617
614
/// Returns `true` if `def_id` refers to a trait (i.e., `trait Foo { ... }`).
You can’t perform that action at this time.
0 commit comments