| //@ check-pass |
| |
| trait Foo { |
| type Assoc; |
| |
| fn do_it(_: &Self::Assoc) |
| where |
| for<'a> Self: Baz<'a>; |
| } |
| |
| trait Baz<'a>: Foo {} |
| |
| impl Foo for () { |
| type Assoc = Inherent; |
| |
| // Ensure that the `for<'a> Self: Baz<'a>` predicate, which has |
| // a supertrait `for<'a> Self: Foo`, does not cause us to fail |
| // to normalize `Self::Assoc`. |
| fn do_it(x: &Self::Assoc) |
| where |
| for<'a> Self: Baz<'a>, |
| { |
| x.inherent(); |
| } |
| } |
| |
| struct Inherent; |
| impl Inherent { |
| fn inherent(&self) {} |
| } |
| |
| // This trivial bound doesn't hold, but the unused lifetime tripped up that check after #117589, and |
| // showed up in its crater results (in `soa-derive 0.13.0`). |
| fn do_it() |
| where |
| for<'a> Inherent: Clone, |
| { |
| } |
| |
| fn main() {} |