Don't map Chalk's `Normalize` to next solver's `NormalizesTo`
`NormalizesTo` is a private predicate that should not be used outside the solver. For normalization, rustc uses `AliasRelate`, so replace with that.
diff --git a/crates/hir-ty/src/next_solver/mapping.rs b/crates/hir-ty/src/next_solver/mapping.rs
index cad51fd..8f6296b 100644
--- a/crates/hir-ty/src/next_solver/mapping.rs
+++ b/crates/hir-ty/src/next_solver/mapping.rs
@@ -808,14 +808,24 @@
_ => unimplemented!(),
};
let args: GenericArgs<'db> = proj_ty.substitution.to_nextsolver(interner);
- let alias = rustc_type_ir::AliasTerm::new(
+ let alias = Ty::new(
interner,
- from_assoc_type_id(proj_ty.associated_ty_id).into(),
- args,
- );
+ rustc_type_ir::TyKind::Alias(
+ rustc_type_ir::AliasTyKind::Projection,
+ rustc_type_ir::AliasTy::new(
+ interner,
+ from_assoc_type_id(proj_ty.associated_ty_id).into(),
+ args,
+ ),
+ ),
+ )
+ .into();
let term = normalize.ty.to_nextsolver(interner).into();
- let normalizes_to = rustc_type_ir::NormalizesTo { alias, term };
- PredicateKind::NormalizesTo(normalizes_to)
+ PredicateKind::AliasRelate(
+ alias,
+ term,
+ rustc_type_ir::AliasRelationDirection::Equate,
+ )
}
chalk_ir::DomainGoal::WellFormed(well_formed) => {
let term = match well_formed {