diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/ui/traits/next-solver/normalize-in-implied_outlives_bounds.rs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/tests/ui/traits/next-solver/normalize-in-implied_outlives_bounds.rs b/tests/ui/traits/next-solver/normalize-in-implied_outlives_bounds.rs new file mode 100644 index 00000000000..1dca19d28e9 --- /dev/null +++ b/tests/ui/traits/next-solver/normalize-in-implied_outlives_bounds.rs @@ -0,0 +1,46 @@ +//@ check-pass +//@ compile-flags: -Znext-solver + +// Minimized example from `rustc_type_ir` that demonstrates a missing deep normalization +// in the new solver when computing the implies outlives bounds of an impl. + +use std::marker::PhantomData; +use std::ops::Deref; + +pub struct SearchGraph<D: Delegate, X = <D as Delegate>::Cx> { + d: PhantomData<D>, + x: PhantomData<X>, +} + +pub trait Delegate { + type Cx; +} + +struct SearchGraphDelegate<D: SolverDelegate> { + _marker: PhantomData<D>, +} + +impl<D> Delegate for SearchGraphDelegate<D> +where + D: SolverDelegate, +{ + type Cx = D::Interner; +} + +pub trait SolverDelegate { + type Interner; +} + +struct EvalCtxt<'a, D, I> +where + D: SolverDelegate<Interner = I>, +{ + search_graph: &'a SearchGraph<SearchGraphDelegate<D>>, +} + +impl<'a, D, I> EvalCtxt<'a, D, <D as SolverDelegate>::Interner> +where + D: SolverDelegate<Interner = I> +{} + +fn main() {} |
