|  | // 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() {} |