diff --git a/compiler/rustc_hir_analysis/src/hir_ty_lowering/mod.rs b/compiler/rustc_hir_analysis/src/hir_ty_lowering/mod.rs
index 5a86e8186a5aa..fa0530b1d4825 100644
--- a/compiler/rustc_hir_analysis/src/hir_ty_lowering/mod.rs
+++ b/compiler/rustc_hir_analysis/src/hir_ty_lowering/mod.rs
@@ -299,7 +299,7 @@ pub enum PermitVariants {
#[derive(Debug, Clone, Copy)]
enum TypeRelativePath<'tcx> {
- AssocItem(DefId, GenericArgsRef<'tcx>),
+ AssocItem(ty::AliasTerm<'tcx>),
Variant { adt: Ty<'tcx>, variant_did: DefId },
Ctor { ctor_def_id: DefId, args: GenericArgsRef<'tcx> },
}
@@ -1476,15 +1476,10 @@ impl<'tcx> dyn HirTyLowerer<'tcx> + '_ {
span,
LowerTypeRelativePathMode::Type(permit_variants),
)? {
- TypeRelativePath::AssocItem(def_id, args) => {
- let alias_ty = ty::AliasTy::new_from_args(
- tcx,
- ty::AliasTyKind::new_from_def_id(tcx, def_id),
- args,
- );
- let ty = Ty::new_alias(tcx, alias_ty);
+ TypeRelativePath::AssocItem(alias_term) => {
+ let ty = alias_term.expect_ty(tcx).to_ty(tcx);
let ty = self.check_param_uses_if_mcg(ty, span, false);
- Ok((ty, tcx.def_kind(def_id), def_id))
+ Ok((ty, tcx.def_kind(alias_term.def_id()), alias_term.def_id()))
}
TypeRelativePath::Variant { adt, variant_did } => {
let adt = self.check_param_uses_if_mcg(adt, span, false);
@@ -1516,9 +1511,9 @@ impl<'tcx> dyn HirTyLowerer<'tcx> + '_ {
span,
LowerTypeRelativePathMode::Const,
)? {
- TypeRelativePath::AssocItem(def_id, args) => {
- self.require_type_const_attribute(def_id, span)?;
- let ct = Const::new_unevaluated(tcx, ty::UnevaluatedConst::new(def_id, args));
+ TypeRelativePath::AssocItem(alias_term) => {
+ self.require_type_const_attribute(alias_term.def_id(), span)?;
+ let ct = Const::new_unevaluated(tcx, alias_term.expect_ct(tcx));
let ct = self.check_param_uses_if_mcg(ct, span, false);
Ok(ct)
}
@@ -1648,7 +1643,7 @@ impl<'tcx> dyn HirTyLowerer<'tcx> + '_ {
}
// FIXME(inherent_associated_types, #106719): Support self types other than ADTs.
- if let Some((did, args)) = self.probe_inherent_assoc_item(
+ if let Some(alias_term) = self.probe_inherent_assoc_item(
segment,
adt_def.did(),
self_ty,
@@ -1656,7 +1651,7 @@ impl<'tcx> dyn HirTyLowerer<'tcx> + '_ {
span,
mode.assoc_tag(),
)? {
- return Ok(TypeRelativePath::AssocItem(did, args));
+ return Ok(TypeRelativePath::AssocItem(alias_term));
}
}
@@ -1690,7 +1685,7 @@ impl<'tcx> dyn HirTyLowerer<'tcx> + '_ {
);
}
- Ok(TypeRelativePath::AssocItem(item_def_id, args))
+ Ok(TypeRelativePath::AssocItem(ty::AliasTerm::new_from_def_id(tcx, item_def_id, args)))
}
/// Resolve a [type-relative](hir::QPath::TypeRelative) (and type-level) path.
@@ -1770,7 +1765,7 @@ impl<'tcx> dyn HirTyLowerer<'tcx> + '_ {
block: HirId,
span: Span,
assoc_tag: ty::AssocTag,
- ) -> Result