blob: e68f82da88af87041f9074d2418b681b9b019518 [file]
//@ check-pass
//@ compile-flags: -Znext-solver
// See trait-system-refactor-initiative/issues/166.
// The old solver doesn't check normalization constraints in `compare_impl_item`.
// The new solver performs lazy normalization so those region constraints may get postponed to
// an infcx that considers regions.
trait Trait {
type Assoc<'a>
where
Self: 'a;
}
impl<'b> Trait for &'b u32 {
type Assoc<'a> = &'a u32
where
Self: 'a;
}
trait Bound<T> {}
trait Entailment<T: Trait> {
fn method()
where
Self: for<'a> Bound<<T as Trait>::Assoc<'a>>;
}
impl<'b, T> Entailment<&'b u32> for T {
// Instantiates trait where-clauses with `&'b u32` and then normalizes
// `T: for<'a> Bound<<&'b u32 as Trait>::Assoc<'a>>` in a separate infcx
// without checking region constraints.
//
// It normalizes to `T: Bound<&'a u32>`, dropping the `&'b u32: 'a` constraint.
fn method()
where
Self: for<'a> Bound<&'a u32>
{}
}
fn main() {}