Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/next_solver/infer/canonical/canonicalizer.rs')
-rw-r--r--crates/hir-ty/src/next_solver/infer/canonical/canonicalizer.rs52
1 files changed, 9 insertions, 43 deletions
diff --git a/crates/hir-ty/src/next_solver/infer/canonical/canonicalizer.rs b/crates/hir-ty/src/next_solver/infer/canonical/canonicalizer.rs
index 7995545b0e..ccd9359010 100644
--- a/crates/hir-ty/src/next_solver/infer/canonical/canonicalizer.rs
+++ b/crates/hir-ty/src/next_solver/infer/canonical/canonicalizer.rs
@@ -8,10 +8,10 @@
use rustc_hash::FxHashMap;
use rustc_index::Idx;
use rustc_type_ir::InferTy::{self, FloatVar, IntVar, TyVar};
-use rustc_type_ir::inherent::{Const as _, IntoKind as _, Region as _, SliceLike, Ty as _};
+use rustc_type_ir::inherent::{Const as _, IntoKind as _, Region as _, Ty as _};
use rustc_type_ir::{
- BoundVar, BoundVarIndexKind, CanonicalQueryInput, DebruijnIndex, Flags, InferConst, RegionKind,
- TyVid, TypeFlags, TypeFoldable, TypeFolder, TypeSuperFoldable, TypeVisitableExt, UniverseIndex,
+ BoundVar, BoundVarIndexKind, DebruijnIndex, Flags, InferConst, RegionKind, TyVid, TypeFlags,
+ TypeFoldable, TypeFolder, TypeSuperFoldable, TypeVisitableExt, UniverseIndex,
};
use smallvec::SmallVec;
use tracing::debug;
@@ -19,7 +19,7 @@ use tracing::debug;
use crate::next_solver::infer::InferCtxt;
use crate::next_solver::{
Binder, Canonical, CanonicalVarKind, CanonicalVars, Const, ConstKind, DbInterner, GenericArg,
- ParamEnvAnd, Placeholder, Region, Ty, TyKind,
+ Placeholder, Region, Ty, TyKind,
};
/// When we canonicalize a value to form a query, we wind up replacing
@@ -66,33 +66,19 @@ impl<'db> InferCtxt<'db> {
/// [c]: https://rust-lang.github.io/chalk/book/canonical_queries/canonicalization.html#canonicalizing-the-query
pub fn canonicalize_query<V>(
&self,
- value: ParamEnvAnd<'db, V>,
+ value: V,
query_state: &mut OriginalQueryValues<'db>,
- ) -> CanonicalQueryInput<DbInterner<'db>, ParamEnvAnd<'db, V>>
+ ) -> Canonical<'db, V>
where
V: TypeFoldable<DbInterner<'db>>,
{
- let (param_env, value) = value.into_parts();
- // FIXME(#118965): We don't canonicalize the static lifetimes that appear in the
- // `param_env` because they are treated differently by trait selection.
- let canonical_param_env = Canonicalizer::canonicalize(
- param_env,
- self,
- self.interner,
- &CanonicalizeFreeRegionsOtherThanStatic,
- query_state,
- );
-
- let canonical = Canonicalizer::canonicalize_with_base(
- canonical_param_env,
+ Canonicalizer::canonicalize(
value,
self,
self.interner,
&CanonicalizeAllFreeRegions,
query_state,
)
- .unchecked_map(|(param_env, value)| ParamEnvAnd { param_env, value });
- CanonicalQueryInput { canonical, typing_mode: self.typing_mode() }
}
/// Canonicalizes a query *response* `V`. When we canonicalize a
@@ -285,26 +271,6 @@ impl CanonicalizeMode for CanonicalizeAllFreeRegions {
}
}
-struct CanonicalizeFreeRegionsOtherThanStatic;
-
-impl CanonicalizeMode for CanonicalizeFreeRegionsOtherThanStatic {
- fn canonicalize_free_region<'db>(
- &self,
- canonicalizer: &mut Canonicalizer<'_, 'db>,
- r: Region<'db>,
- ) -> Region<'db> {
- if r.is_static() { r } else { canonicalizer.canonical_var_for_region_in_root_universe(r) }
- }
-
- fn any(&self) -> bool {
- true
- }
-
- fn preserve_universes(&self) -> bool {
- false
- }
-}
-
struct Canonicalizer<'cx, 'db> {
/// Set to `None` to disable the resolution of inference variables.
infcx: &'cx InferCtxt<'db>,
@@ -532,7 +498,7 @@ impl<'cx, 'db> Canonicalizer<'cx, 'db> {
{
let base = Canonical {
max_universe: UniverseIndex::ROOT,
- variables: CanonicalVars::new_from_iter(tcx, []),
+ variables: CanonicalVars::empty(tcx),
value: (),
};
Canonicalizer::canonicalize_with_base(
@@ -596,7 +562,7 @@ impl<'cx, 'db> Canonicalizer<'cx, 'db> {
debug_assert!(!out_value.has_infer() && !out_value.has_placeholders());
let canonical_variables =
- CanonicalVars::new_from_iter(tcx, canonicalizer.universe_canonicalized_variables());
+ CanonicalVars::new_from_slice(&canonicalizer.universe_canonicalized_variables());
let max_universe = canonical_variables
.iter()