| // FIXME(#96332): We should be able to suggest a fix and automatically fix. | |
| #![allow(dead_code)] | |
| mod foo { | |
| trait OtherTrait<'a> {} | |
| impl<'a> OtherTrait<'a> for &'a () {} | |
| trait ObjectTrait<T> {} | |
| trait MyTrait<T> { | |
| fn use_self<K>(&self) -> &(); | |
| } | |
| trait Irrelevant {} | |
| impl<T> MyTrait<T> for dyn ObjectTrait<T> { | |
| fn use_self<K>(&self) -> &() { panic!() } | |
| } | |
| impl<T> Irrelevant for dyn ObjectTrait<T> {} | |
| fn use_it<'a, T>(val: &'a dyn ObjectTrait<T>) -> impl OtherTrait<'a> + 'a { | |
| val.use_self::<T>() //~ ERROR borrowed data escapes | |
| } | |
| } | |
| mod bar { | |
| trait ObjectTrait {} | |
| trait MyTrait { | |
| fn use_self(&self) -> &(); | |
| } | |
| trait Irrelevant {} | |
| impl MyTrait for dyn ObjectTrait { | |
| fn use_self(&self) -> &() { panic!() } | |
| } | |
| impl Irrelevant for dyn ObjectTrait {} | |
| fn use_it<'a>(val: &'a dyn ObjectTrait) -> &'a () { | |
| val.use_self() | |
| //~^ ERROR: borrowed data escapes | |
| } | |
| } | |
| mod baz { | |
| trait ObjectTrait {} | |
| trait MyTrait { | |
| fn use_self(&self) -> &(); | |
| } | |
| trait Irrelevant {} | |
| impl MyTrait for Box<dyn ObjectTrait> { | |
| fn use_self(&self) -> &() { panic!() } | |
| } | |
| impl Irrelevant for Box<dyn ObjectTrait> {} | |
| fn use_it<'a>(val: &'a Box<dyn ObjectTrait + 'a>) -> &'a () { | |
| val.use_self() | |
| //~^ ERROR: borrowed data escapes | |
| } | |
| } | |
| mod bat { | |
| trait OtherTrait<'a> {} | |
| impl<'a> OtherTrait<'a> for &'a () {} | |
| trait ObjectTrait {} | |
| impl dyn ObjectTrait { | |
| fn use_self(&self) -> &() { panic!() } | |
| } | |
| fn use_it<'a>(val: &'a dyn ObjectTrait) -> impl OtherTrait<'a> + 'a { | |
| val.use_self() | |
| //~^ ERROR borrowed data escapes | |
| } | |
| } | |
| mod ban { | |
| trait OtherTrait<'a> {} | |
| impl<'a> OtherTrait<'a> for &'a () {} | |
| trait ObjectTrait {} | |
| trait MyTrait { | |
| fn use_self(&self) -> &() { panic!() } | |
| } | |
| trait Irrelevant { | |
| fn use_self(&self) -> &() { panic!() } | |
| } | |
| impl MyTrait for dyn ObjectTrait {} | |
| fn use_it<'a>(val: &'a dyn ObjectTrait) -> impl OtherTrait<'a> { | |
| val.use_self() //~ ERROR borrowed data escapes | |
| } | |
| } | |
| mod bal { | |
| trait OtherTrait<'a> {} | |
| impl<'a> OtherTrait<'a> for &'a () {} | |
| trait ObjectTrait {} | |
| trait MyTrait { | |
| fn use_self(&self) -> &() { panic!() } | |
| } | |
| trait Irrelevant { | |
| fn use_self(&self) -> &() { panic!() } | |
| } | |
| impl MyTrait for dyn ObjectTrait {} | |
| impl Irrelevant for dyn ObjectTrait {} | |
| fn use_it<'a>(val: &'a dyn ObjectTrait) -> impl OtherTrait<'a> + 'a { | |
| MyTrait::use_self(val) //~ ERROR borrowed data escapes | |
| } | |
| } | |
| fn main() {} |