blob: 7fcb164d3a95dc3dd505ee22d3c12b8214dcd4b7 [file] [edit]
//@ check-pass
//@ revisions: current next
//@ ignore-compare-mode-next-solver (explicit revisions)
//@[next] compile-flags: -Znext-solver
// In `fn hrtb` normalizing the elaborated where-clause
// `T: for<'a> Supertrait<<&'a () as WithAssoc>::As>` results in
// a region error as `&'a ()` is not equal to `&'static ()`.
//
// This happens even though the where-clauses themselves are well-formed
// as we never have to prove `&'a (): WithAssoc` as `'a` is a bound variable.
//
// I don't think this can cause unsoundness and has already been accepted in the
// old solver as we didn't register TypeOutlives constraints if `ignoring_regions`
// is set. The new solver always registers outlives constraints, so this then
// caused an error there. We need to ignore these region errors with the new solver
// due to trait-system-refactor-initiative#166.
#![allow(unused)]
trait Supertrait<T> {}
trait Other {
fn method(&self) {}
}
impl<T: 'static> WithAssoc for T {
type As = T;
}
trait WithAssoc {
type As;
}
trait Trait<P: WithAssoc>: Supertrait<P::As> {
fn method(&self) {}
}
fn hrtb<T: for<'a> Trait<&'a ()>>() {}
pub fn main() {}