diff --git a/compiler/rustc_middle/src/arena.rs b/compiler/rustc_middle/src/arena.rs
index c648b2bfe9b..a532635669d 100644
--- a/compiler/rustc_middle/src/arena.rs
+++ b/compiler/rustc_middle/src/arena.rs
@@ -47,7 +47,7 @@ macro_rules! arena_types {
rustc_middle::traits::query::DropckOutlivesResult<'tcx>
>
>,
- [] normalize_projection_ty:
+ [] normalize_canonicalized_projection_ty:
rustc_middle::infer::canonical::Canonical<'tcx,
rustc_middle::infer::canonical::QueryResponse<'tcx,
rustc_middle::traits::query::NormalizationResult<'tcx>
diff --git a/compiler/rustc_middle/src/query/mod.rs b/compiler/rustc_middle/src/query/mod.rs
index 5be45c33e11..c931d2e5313 100644
--- a/compiler/rustc_middle/src/query/mod.rs
+++ b/compiler/rustc_middle/src/query/mod.rs
@@ -31,7 +31,7 @@ use crate::query::plumbing::{
};
use crate::thir;
use crate::traits::query::{
- CanonicalPredicateGoal, CanonicalProjectionGoal, CanonicalTyGoal,
+ CanonicalAliasGoal, CanonicalPredicateGoal, CanonicalTyGoal,
CanonicalTypeOpAscribeUserTypeGoal, CanonicalTypeOpEqGoal, CanonicalTypeOpNormalizeGoal,
CanonicalTypeOpProvePredicateGoal, CanonicalTypeOpSubtypeGoal, NoSolution,
};
@@ -1931,9 +1931,13 @@ rustc_queries! {
arena_cache
}
- /// Do not call this query directly: invoke `normalize` instead.
- query normalize_projection_ty(
- goal: CanonicalProjectionGoal<'tcx>
+ ///
+ ///
+ /// Do not call this query directly: Invoke `normalize` instead.
+ ///
+ ///
+ query normalize_canonicalized_projection_ty(
+ goal: CanonicalAliasGoal<'tcx>
) -> Result<
&'tcx Canonical<'tcx, canonical::QueryResponse<'tcx, NormalizationResult<'tcx>>>,
NoSolution,
@@ -1941,9 +1945,13 @@ rustc_queries! {
desc { "normalizing `{}`", goal.value.value }
}
- /// Do not call this query directly: invoke `normalize` instead.
- query normalize_weak_ty(
- goal: CanonicalProjectionGoal<'tcx>
+ ///
+ ///
+ /// Do not call this query directly: Invoke `normalize` instead.
+ ///
+ ///
+ query normalize_canonicalized_weak_ty(
+ goal: CanonicalAliasGoal<'tcx>
) -> Result<
&'tcx Canonical<'tcx, canonical::QueryResponse<'tcx, NormalizationResult<'tcx>>>,
NoSolution,
@@ -1951,9 +1959,13 @@ rustc_queries! {
desc { "normalizing `{}`", goal.value.value }
}
- /// Do not call this query directly: invoke `normalize` instead.
- query normalize_inherent_projection_ty(
- goal: CanonicalProjectionGoal<'tcx>
+ ///
+ ///
+ /// Do not call this query directly: Invoke `normalize` instead.
+ ///
+ ///
+ query normalize_canonicalized_inherent_projection_ty(
+ goal: CanonicalAliasGoal<'tcx>
) -> Result<
&'tcx Canonical<'tcx, canonical::QueryResponse<'tcx, NormalizationResult<'tcx>>>,
NoSolution,
diff --git a/compiler/rustc_middle/src/traits/query.rs b/compiler/rustc_middle/src/traits/query.rs
index 61d96cad57d..12e4f70ba57 100644
--- a/compiler/rustc_middle/src/traits/query.rs
+++ b/compiler/rustc_middle/src/traits/query.rs
@@ -67,7 +67,7 @@ pub mod type_op {
}
}
-pub type CanonicalProjectionGoal<'tcx> = Canonical<'tcx, ty::ParamEnvAnd<'tcx, ty::AliasTy<'tcx>>>;
+pub type CanonicalAliasGoal<'tcx> = Canonical<'tcx, ty::ParamEnvAnd<'tcx, ty::AliasTy<'tcx>>>;
pub type CanonicalTyGoal<'tcx> = Canonical<'tcx, ty::ParamEnvAnd<'tcx, Ty<'tcx>>>;
@@ -177,10 +177,10 @@ pub struct MethodAutoderefBadTy<'tcx> {
pub ty: Canonical<'tcx, QueryResponse<'tcx, Ty<'tcx>>>,
}
-/// Result from the `normalize_projection_ty` query.
+/// Result of the `normalize_canonicalized_{{,inherent_}projection,weak}_ty` queries.
#[derive(Clone, Debug, HashStable, TypeFoldable, TypeVisitable)]
pub struct NormalizationResult<'tcx> {
- /// Result of normalization.
+ /// Result of the normalization.
pub normalized_ty: Ty<'tcx>,
}
diff --git a/compiler/rustc_trait_selection/src/traits/normalize.rs b/compiler/rustc_trait_selection/src/traits/normalize.rs
index ac62f875fb9..f37d917b4a0 100644
--- a/compiler/rustc_trait_selection/src/traits/normalize.rs
+++ b/compiler/rustc_trait_selection/src/traits/normalize.rs
@@ -355,8 +355,6 @@ impl<'a, 'b, 'tcx> TypeFolder> for AssocTypeNormalizer<'a, 'b, 'tcx
let data = data.fold_with(self);
- // FIXME(inherent_associated_types): Do we need to honor `self.eager_inference_replacement`
- // here like `ty::Projection`?
project::normalize_inherent_projection(
self.selcx,
self.param_env,
diff --git a/compiler/rustc_trait_selection/src/traits/query/normalize.rs b/compiler/rustc_trait_selection/src/traits/query/normalize.rs
index 26da065246d..70fd0b7e50b 100644
--- a/compiler/rustc_trait_selection/src/traits/query/normalize.rs
+++ b/compiler/rustc_trait_selection/src/traits/query/normalize.rs
@@ -1,6 +1,6 @@
//! Code for the 'normalization' query. This consists of a wrapper
//! which folds deeply, invoking the underlying
-//! `normalize_projection_ty` query when it encounters projections.
+//! `normalize_canonicalized_projection_ty` query when it encounters projections.
use crate::infer::at::At;
use crate::infer::canonical::OriginalQueryValues;
@@ -271,9 +271,9 @@ impl<'cx, 'tcx> FallibleTypeFolder> for QueryNormalizer<'cx, 'tcx>
debug!("QueryNormalizer: c_data = {:#?}", c_data);
debug!("QueryNormalizer: orig_values = {:#?}", orig_values);
let result = match kind {
- ty::Projection => tcx.normalize_projection_ty(c_data),
- ty::Weak => tcx.normalize_weak_ty(c_data),
- ty::Inherent => tcx.normalize_inherent_projection_ty(c_data),
+ ty::Projection => tcx.normalize_canonicalized_projection_ty(c_data),
+ ty::Weak => tcx.normalize_canonicalized_weak_ty(c_data),
+ ty::Inherent => tcx.normalize_canonicalized_inherent_projection_ty(c_data),
kind => unreachable!("did not expect {kind:?} due to match arm above"),
}?;
// We don't expect ambiguity.
@@ -308,10 +308,10 @@ impl<'cx, 'tcx> FallibleTypeFolder> for QueryNormalizer<'cx, 'tcx>
} else {
result.normalized_ty
};
- // `tcx.normalize_projection_ty` may normalize to a type that still has
- // unevaluated consts, so keep normalizing here if that's the case.
- // Similarly, `tcx.normalize_weak_ty` will only unwrap one layer of type
- // and we need to continue folding it to reveal the TAIT behind it.
+ // `tcx.normalize_canonicalized_projection_ty` may normalize to a type that
+ // still has unevaluated consts, so keep normalizing here if that's the case.
+ // Similarly, `tcx.normalize_canonicalized_weak_ty` will only unwrap one layer
+ // of type and we need to continue folding it to reveal the TAIT behind it.
if res != ty
&& (res.has_type_flags(ty::TypeFlags::HAS_CT_PROJECTION) || kind == ty::Weak)
{
diff --git a/compiler/rustc_traits/src/normalize_projection_ty.rs b/compiler/rustc_traits/src/normalize_projection_ty.rs
index 94df28a1454..92a19fb9119 100644
--- a/compiler/rustc_traits/src/normalize_projection_ty.rs
+++ b/compiler/rustc_traits/src/normalize_projection_ty.rs
@@ -5,7 +5,7 @@ use rustc_middle::ty::{ParamEnvAnd, TyCtxt};
use rustc_trait_selection::infer::InferCtxtBuilderExt;
use rustc_trait_selection::traits::error_reporting::TypeErrCtxtExt;
use rustc_trait_selection::traits::query::{
- normalize::NormalizationResult, CanonicalProjectionGoal, NoSolution,
+ normalize::NormalizationResult, CanonicalAliasGoal, NoSolution,
};
use rustc_trait_selection::traits::{
self, FulfillmentErrorCode, ObligationCause, SelectionContext,
@@ -13,18 +13,19 @@ use rustc_trait_selection::traits::{
pub(crate) fn provide(p: &mut Providers) {
*p = Providers {
- normalize_projection_ty,
- normalize_weak_ty,
- normalize_inherent_projection_ty,
+ normalize_canonicalized_projection_ty,
+ normalize_canonicalized_weak_ty,
+ normalize_canonicalized_inherent_projection_ty,
..*p
};
}
-fn normalize_projection_ty<'tcx>(
+fn normalize_canonicalized_projection_ty<'tcx>(
tcx: TyCtxt<'tcx>,
- goal: CanonicalProjectionGoal<'tcx>,
+ goal: CanonicalAliasGoal<'tcx>,
) -> Result<&'tcx Canonical<'tcx, QueryResponse<'tcx, NormalizationResult<'tcx>>>, NoSolution> {
- debug!("normalize_provider(goal={:#?})", goal);
+ debug!("normalize_canonicalized_projection_ty(goal={:#?})", goal);
+
tcx.infer_ctxt().enter_canonical_trait_query(
&goal,
|ocx, ParamEnvAnd { param_env, value: goal }| {
@@ -61,19 +62,19 @@ fn normalize_projection_ty<'tcx>(
return Err(NoSolution);
}
- // FIXME(associated_const_equality): All users of normalize_projection_ty expected
- // a type, but there is the possibility it could've been a const now. Maybe change
- // it to a Term later?
+ // FIXME(associated_const_equality): All users of normalize_canonicalized_projection_ty
+ // expected a type, but there is the possibility it could've been a const now.
+ // Maybe change it to a Term later?
Ok(NormalizationResult { normalized_ty: answer.ty().unwrap() })
},
)
}
-fn normalize_weak_ty<'tcx>(
+fn normalize_canonicalized_weak_ty<'tcx>(
tcx: TyCtxt<'tcx>,
- goal: CanonicalProjectionGoal<'tcx>,
+ goal: CanonicalAliasGoal<'tcx>,
) -> Result<&'tcx Canonical<'tcx, QueryResponse<'tcx, NormalizationResult<'tcx>>>, NoSolution> {
- debug!("normalize_provider(goal={:#?})", goal);
+ debug!("normalize_canonicalized_weak_ty(goal={:#?})", goal);
tcx.infer_ctxt().enter_canonical_trait_query(
&goal,
@@ -95,11 +96,11 @@ fn normalize_weak_ty<'tcx>(
)
}
-fn normalize_inherent_projection_ty<'tcx>(
+fn normalize_canonicalized_inherent_projection_ty<'tcx>(
tcx: TyCtxt<'tcx>,
- goal: CanonicalProjectionGoal<'tcx>,
+ goal: CanonicalAliasGoal<'tcx>,
) -> Result<&'tcx Canonical<'tcx, QueryResponse<'tcx, NormalizationResult<'tcx>>>, NoSolution> {
- debug!("normalize_provider(goal={:#?})", goal);
+ debug!("normalize_canonicalized_inherent_projection_ty(goal={:#?})", goal);
tcx.infer_ctxt().enter_canonical_trait_query(
&goal,