1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 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() {}
|