diff options
| author | Matthias Krüger <matthias.krueger@famsik.de> | 2024-09-27 19:08:01 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-27 19:08:01 +0200 |
| commit | 966a0b76bc21ba65071b4d50dfb0536e0581604f (patch) | |
| tree | cb03957ec3e5050d456cb76445a55c146af42ce6 | |
| parent | 01fecf60efcb9c92c8243812e827e09ac965fba4 (diff) | |
| parent | 9766192545190027b3c087f78cdc7dc5a51f0204 (diff) | |
| download | rust-966a0b76bc21ba65071b4d50dfb0536e0581604f.tar.gz rust-966a0b76bc21ba65071b4d50dfb0536e0581604f.zip | |
Rollup merge of #130927 - lcnr:normalizes-to-comments, r=compiler-errors
update outdated comments r? `@compiler-errors` cc `@gavinleroy`
| -rw-r--r-- | compiler/rustc_type_ir/src/predicate.rs | 4 | ||||
| -rw-r--r-- | compiler/rustc_type_ir/src/predicate_kind.rs | 12 |
2 files changed, 8 insertions, 8 deletions
diff --git a/compiler/rustc_type_ir/src/predicate.rs b/compiler/rustc_type_ir/src/predicate.rs index 7e300fe02dc..76065c10d19 100644 --- a/compiler/rustc_type_ir/src/predicate.rs +++ b/compiler/rustc_type_ir/src/predicate.rs @@ -668,8 +668,8 @@ impl<I: Interner> fmt::Debug for ProjectionPredicate<I> { } } -/// Used by the new solver. Unlike a `ProjectionPredicate` this can only be -/// proven by actually normalizing `alias`. +/// Used by the new solver to normalize an alias. This always expects the `term` to +/// be an unconstrained inference variable which is used as the output. #[derive_where(Clone, Copy, Hash, PartialEq, Eq; I: Interner)] #[derive(TypeVisitable_Generic, TypeFoldable_Generic, Lift_Generic)] #[cfg_attr(feature = "nightly", derive(TyDecodable, TyEncodable, HashStable_NoContext))] diff --git a/compiler/rustc_type_ir/src/predicate_kind.rs b/compiler/rustc_type_ir/src/predicate_kind.rs index c8a21028588..55015e6e202 100644 --- a/compiler/rustc_type_ir/src/predicate_kind.rs +++ b/compiler/rustc_type_ir/src/predicate_kind.rs @@ -74,13 +74,13 @@ pub enum PredicateKind<I: Interner> { Ambiguous, /// This should only be used inside of the new solver for `AliasRelate` and expects - /// the `term` to be an unconstrained inference variable. + /// the `term` to be always be an unconstrained inference variable. It is used to + /// normalize `alias` as much as possible. In case the alias is rigid - i.e. it cannot + /// be normalized in the current environment - this constrains `term` to be equal to + /// the alias itself. /// - /// The alias normalizes to `term`. Unlike `Projection`, this always fails if the - /// alias cannot be normalized in the current context. For the rigid alias - /// `T as Trait>::Assoc`, `Projection(<T as Trait>::Assoc, ?x)` constrains `?x` - /// to `<T as Trait>::Assoc` while `NormalizesTo(<T as Trait>::Assoc, ?x)` - /// results in `NoSolution`. + /// It is likely more useful to think of this as a function `normalizes_to(alias)`, + /// whose return value is written into `term`. NormalizesTo(ty::NormalizesTo<I>), /// Separate from `ClauseKind::Projection` which is used for normalization in new solver. |
