Skip to content

Commit 78718d5

Browse files
zetanumbersywxt
andcommitted
1 parent beeb8e3 commit 78718d5

File tree

3 files changed

+10
-5
lines changed

3 files changed

+10
-5
lines changed

compiler/rustc_hir/src/def.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -440,6 +440,13 @@ impl DefKind {
440440
| DefKind::ExternCrate => false,
441441
}
442442
}
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+
matches!(self, DefKind::Closure | DefKind::InlineConst | DefKind::SyntheticCoroutineBody)
449+
}
443450
}
444451

445452
/// The resolution of a path or export.

compiler/rustc_hir_analysis/src/lib.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -238,7 +238,8 @@ pub fn check_crate(tcx: TyCtxt<'_>) {
238238
_ => (),
239239
}
240240
// 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()) {
242243
tcx.ensure_ok().typeck(item_def_id);
243244
}
244245
// Ensure we generate the new `DefId` before finishing `check_crate`.

compiler/rustc_middle/src/ty/util.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -609,10 +609,7 @@ impl<'tcx> TyCtxt<'tcx> {
609609
/// Returns `true` if `def_id` refers to a definition that does not have its own
610610
/// type-checking context, i.e. closure, coroutine or inline const.
611611
pub fn is_typeck_child(self, def_id: DefId) -> bool {
612-
matches!(
613-
self.def_kind(def_id),
614-
DefKind::Closure | DefKind::InlineConst | DefKind::SyntheticCoroutineBody
615-
)
612+
self.def_kind(def_id).is_typeck_child()
616613
}
617614

618615
/// Returns `true` if `def_id` refers to a trait (i.e., `trait Foo { ... }`).

0 commit comments

Comments
 (0)