@@ -8,6 +8,7 @@ use derive_where::derive_where;
88use rustc_macros:: { HashStable_NoContext , TyDecodable , TyEncodable } ;
99use rustc_type_ir_macros:: { Lift_Generic , TypeFoldable_Generic , TypeVisitable_Generic } ;
1010
11+ use crate :: search_graph:: PathKind ;
1112use crate :: { self as ty, Canonical , CanonicalVarValues , Interner , Upcast } ;
1213
1314pub type CanonicalInput < I , T = <I as Interner >:: Predicate > =
@@ -68,11 +69,6 @@ pub enum GoalSource {
6869 /// FIXME(-Znext-solver=coinductive): Explain how and why this
6970 /// changes whether cycles are coinductive.
7071 ImplWhereBound ,
71- /// When eagerly replacing aliases with impl where-bounds, we also
72- /// have to consider these normalization goals to be coinductive.
73- ///
74- /// This is necessary for tests/ui/sized/coinductive-1.rs to compile.
75- NormalizeImplWhereBound ,
7672 /// Const conditions that need to hold for `~const` alias bounds to hold.
7773 ///
7874 /// FIXME(-Znext-solver=coinductive): Are these even coinductive?
@@ -83,6 +79,17 @@ pub enum GoalSource {
8379 /// This is used in two places: projecting to an opaque whose hidden type
8480 /// is already registered in the opaque type storage, and for rigid projections.
8581 AliasWellFormed ,
82+ /// Proving super trait bounds while checking whether a trait or projection
83+ /// goal is unknowable.
84+ ///
85+ /// We must not treat these as an inductive steps, see `EvalCtxt::step_kind_for_source`.
86+ CoherenceUnknowableSuper ,
87+ /// In case normalizing aliases in nested goals cycles, eagerly normalizing these aliases
88+ /// in the context of the parent may incorrectly change the cycle kind. Normalizing
89+ /// aliases in goals therefore tracks the original path kind for this nested goal.
90+ ///
91+ /// This is necessary for tests/ui/sized/coinductive-1.rs to compile.
92+ NormalizeGoal ( PathKind ) ,
8693}
8794
8895#[ derive_where( Clone ; I : Interner , Goal <I , P >: Clone ) ]
0 commit comments