From 4801aa41ce0b0fadd7d71d2a219f39748ac7c1c6 Mon Sep 17 00:00:00 2001 From: Cameron Steffen Date: Tue, 7 Jul 2026 12:19:47 -0500 Subject: [PATCH] Normalize field type for InhabitedPredicate --- .../src/ty/inhabitedness/inhabited_predicate.rs | 5 +---- compiler/rustc_middle/src/ty/inhabitedness/mod.rs | 13 +++++++------ 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/compiler/rustc_middle/src/ty/inhabitedness/inhabited_predicate.rs b/compiler/rustc_middle/src/ty/inhabitedness/inhabited_predicate.rs index 03a6163b33ade..bf579c85ba113 100644 --- a/compiler/rustc_middle/src/ty/inhabitedness/inhabited_predicate.rs +++ b/compiler/rustc_middle/src/ty/inhabitedness/inhabited_predicate.rs @@ -267,10 +267,7 @@ impl<'tcx> InhabitedPredicate<'tcx> { Some(InhabitedPredicate::True) => Some(InhabitedPredicate::True), Some(a) => Some(a.or(tcx, b.instantiate_opt(tcx, args).unwrap_or(b))), }, - Self::True | Self::False | Self::NotInModule(_) => None, - Self::OpaqueType(_) => { - bug!("unexpected OpaqueType in InhabitedPredicate"); - } + Self::True | Self::False | Self::NotInModule(_) | Self::OpaqueType(_) => None, } } } diff --git a/compiler/rustc_middle/src/ty/inhabitedness/mod.rs b/compiler/rustc_middle/src/ty/inhabitedness/mod.rs index 55b359866bb97..dd989d8ed9a6e 100644 --- a/compiler/rustc_middle/src/ty/inhabitedness/mod.rs +++ b/compiler/rustc_middle/src/ty/inhabitedness/mod.rs @@ -47,7 +47,7 @@ use rustc_type_ir::TyKind::*; use tracing::instrument; use crate::query::Providers; -use crate::ty::{self, DefId, Ty, TyCtxt, TypeVisitableExt, VariantDef, Visibility}; +use crate::ty::{self, DefId, Ty, TyCtxt, TypeVisitableExt, TypingEnv, VariantDef, Visibility}; pub mod inhabited_predicate; @@ -82,11 +82,12 @@ impl<'tcx> VariantDef { InhabitedPredicate::all( tcx, self.fields.iter().map(|field| { - let pred = tcx - .type_of(field.did) - .instantiate_identity() - .skip_norm_wip() - .inhabited_predicate(tcx); + let field_ty = tcx.normalize_erasing_regions( + TypingEnv::non_body_analysis(tcx, adt.did()), + tcx.type_of(field.did).instantiate_identity(), + ); + let pred = field_ty.inhabited_predicate(tcx); + if adt.is_enum() { return pred; }