// check-pass #![feature(type_alias_impl_trait)] fn foo() { struct Foo<'a> { x: &'a mut u8, } impl<'a> Foo<'a> { fn foo(&self) -> impl Sized {} } // use site let mut x = 5; let y = Foo { x: &mut x }; let z = y.foo(); let _a = &x; // invalidate the `&'a mut`in `y` let _b = z; // this should *not* check that `'a` in the type `Foo<'a>::foo::opaque` is live } fn bar() { struct Foo<'a> { x: &'a mut u8, } // desugared type FooX<'a> = impl Sized; impl<'a> Foo<'a> { fn foo(&self) -> FooX<'a> {} } // use site let mut x = 5; let y = Foo { x: &mut x }; let z = y.foo(); let _a = &x; // invalidate the `&'a mut`in `y` let _b = z; // this should *not* check that `'a` in the type `Foo<'a>::foo::opaque` is live } fn main() {}