| // Previously ICEd because we didn't properly track binders in suggestions |
| //@ check-fail |
| |
| pub trait Foo<'de>: Sized {} |
| |
| pub trait Bar<'a>: 'static { |
| type Inner: 'a; |
| } |
| |
| pub trait Fubar { |
| type Bar: for<'a> Bar<'a>; |
| } |
| |
| pub struct Baz<T>(pub T); |
| |
| impl<'de, T> Foo<'de> for Baz<T> where T: Foo<'de> {} |
| |
| struct Empty; |
| |
| impl<M> Dummy<M> for Empty |
| where |
| M: Fubar, |
| for<'de> Baz<<M::Bar as Bar<'de>>::Inner>: Foo<'de>, |
| { |
| } |
| |
| pub trait Dummy<M> |
| where |
| M: Fubar, |
| { |
| } |
| |
| pub struct EmptyBis<'a>(&'a [u8]); |
| |
| impl<'a> Bar<'a> for EmptyBis<'static> { |
| type Inner = EmptyBis<'a>; |
| } |
| |
| pub struct EmptyMarker; |
| |
| impl Fubar for EmptyMarker { |
| type Bar = EmptyBis<'static>; |
| } |
| |
| fn icey_bounds<D: Dummy<EmptyMarker>>(p: &D) {} |
| |
| fn trigger_ice() { |
| let p = Empty; |
| icey_bounds(&p); //~ERROR the trait bound |
| } |
| |
| fn main() {} |