Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/specialization.rs')
-rw-r--r--crates/hir-ty/src/specialization.rs10
1 files changed, 6 insertions, 4 deletions
diff --git a/crates/hir-ty/src/specialization.rs b/crates/hir-ty/src/specialization.rs
index 1ef8adb4d9..467b598447 100644
--- a/crates/hir-ty/src/specialization.rs
+++ b/crates/hir-ty/src/specialization.rs
@@ -11,7 +11,7 @@ use crate::{
db::HirDatabase,
lower::GenericPredicates,
next_solver::{
- DbInterner, TypingMode,
+ DbInterner, TypingMode, Unnormalized,
infer::{DbInternerInferExt, traits::ObligationCause},
obligation_ctxt::ObligationCtxt,
util::clauses_as_obligations,
@@ -81,7 +81,7 @@ fn specializes_query(
let infcx = interner.infer_ctxt().build(TypingMode::non_body_analysis());
let specializing_impl_trait_ref =
- db.impl_trait(specializing_impl_def_id).unwrap().instantiate_identity();
+ db.impl_trait(specializing_impl_def_id).unwrap().instantiate_identity().skip_norm_wip();
let cause = &ObligationCause::dummy();
debug!(
"fulfill_implication({:?}, trait_ref={:?} |- {:?} applies)",
@@ -96,7 +96,8 @@ fn specializes_query(
let parent_impl_trait_ref = db
.impl_trait(parent_impl_def_id)
.expect("expected source impl to be a trait impl")
- .instantiate(interner, parent_args);
+ .instantiate(interner, parent_args)
+ .skip_norm_wip();
// do the impls unify? If not, no specialization.
let Ok(()) = ocx.eq(cause, param_env, specializing_impl_trait_ref, parent_impl_trait_ref)
@@ -109,7 +110,8 @@ fn specializes_query(
// only be referenced via projection predicates.
ocx.register_obligations(clauses_as_obligations(
GenericPredicates::query_all(db, parent_impl_def_id.into())
- .iter_instantiated(interner, parent_args.as_slice()),
+ .iter_instantiated(interner, parent_args.as_slice())
+ .map(Unnormalized::skip_norm_wip),
*cause,
param_env,
));