diff options
| author | Chayim Refael Friedman <chayimfr@gmail.com> | 2025-08-25 20:56:45 +0300 |
|---|---|---|
| committer | Chayim Refael Friedman <chayimfr@gmail.com> | 2025-08-25 20:56:45 +0300 |
| commit | 4b5bb18c57270a5b823235397067ae82c64bf1f1 (patch) | |
| tree | bafe94021329dfe92f264ea44c3fa188b4afcc47 | |
| parent | aa49c0b8bb27700ab77fd8cb7231d18f4f6d2e97 (diff) | |
| download | rust-4b5bb18c57270a5b823235397067ae82c64bf1f1.tar.gz rust-4b5bb18c57270a5b823235397067ae82c64bf1f1.zip | |
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.
| -rw-r--r-- | src/tools/rust-analyzer/crates/hir-ty/src/next_solver/mapping.rs | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/tools/rust-analyzer/crates/hir-ty/src/next_solver/mapping.rs b/src/tools/rust-analyzer/crates/hir-ty/src/next_solver/mapping.rs index cad51fd85f5..8f6296b1454 100644 --- a/src/tools/rust-analyzer/crates/hir-ty/src/next_solver/mapping.rs +++ b/src/tools/rust-analyzer/crates/hir-ty/src/next_solver/mapping.rs @@ -808,14 +808,24 @@ impl<'db> ChalkToNextSolver<'db, PredicateKind<'db>> for chalk_ir::DomainGoal<In _ => 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 { |
