@@ -8,6 +8,7 @@ use derive_where::derive_where;
8
8
use rustc_macros:: { HashStable_NoContext , TyDecodable , TyEncodable } ;
9
9
use rustc_type_ir_macros:: { Lift_Generic , TypeFoldable_Generic , TypeVisitable_Generic } ;
10
10
11
+ use crate :: search_graph:: PathKind ;
11
12
use crate :: { self as ty, Canonical , CanonicalVarValues , Interner , Upcast } ;
12
13
13
14
pub type CanonicalInput < I , T = <I as Interner >:: Predicate > =
@@ -68,11 +69,6 @@ pub enum GoalSource {
68
69
/// FIXME(-Znext-solver=coinductive): Explain how and why this
69
70
/// changes whether cycles are coinductive.
70
71
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 ,
76
72
/// Const conditions that need to hold for `~const` alias bounds to hold.
77
73
///
78
74
/// FIXME(-Znext-solver=coinductive): Are these even coinductive?
@@ -83,6 +79,17 @@ pub enum GoalSource {
83
79
/// This is used in two places: projecting to an opaque whose hidden type
84
80
/// is already registered in the opaque type storage, and for rigid projections.
85
81
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 ) ,
86
93
}
87
94
88
95
#[ derive_where( Clone ; I : Interner , Goal <I , P >: Clone ) ]
0 commit comments