1 // FIXME(#96332): We should be able to suggest a fix and automatically fix.
6 trait OtherTrait<'a> {}
7 impl<'a> OtherTrait<'a> for &'a () {}
9 trait ObjectTrait<T> {}
11 fn use_self<K>(&self) -> &();
15 impl<T> MyTrait<T> for dyn ObjectTrait<T> {
16 fn use_self<K>(&self) -> &() { panic!() }
18 impl<T> Irrelevant for dyn ObjectTrait<T> {}
20 fn use_it<'a, T>(val: &'a dyn ObjectTrait<T>) -> impl OtherTrait<'a> + 'a {
21 val.use_self::<T>() //~ ERROR borrowed data escapes
28 fn use_self(&self) -> &();
32 impl MyTrait for dyn ObjectTrait {
33 fn use_self(&self) -> &() { panic!() }
35 impl Irrelevant for dyn ObjectTrait {}
37 fn use_it<'a>(val: &'a dyn ObjectTrait) -> &'a () {
45 fn use_self(&self) -> &();
49 impl MyTrait for Box<dyn ObjectTrait> {
50 fn use_self(&self) -> &() { panic!() }
52 impl Irrelevant for Box<dyn ObjectTrait> {}
54 fn use_it<'a>(val: &'a Box<dyn ObjectTrait + 'a>) -> &'a () {
60 trait OtherTrait<'a> {}
61 impl<'a> OtherTrait<'a> for &'a () {}
65 impl dyn ObjectTrait {
66 fn use_self(&self) -> &() { panic!() }
69 fn use_it<'a>(val: &'a dyn ObjectTrait) -> impl OtherTrait<'a> + 'a {
71 //~^ ERROR borrowed data escapes
76 trait OtherTrait<'a> {}
77 impl<'a> OtherTrait<'a> for &'a () {}
81 fn use_self(&self) -> &() { panic!() }
84 fn use_self(&self) -> &() { panic!() }
87 impl MyTrait for dyn ObjectTrait {}
89 fn use_it<'a>(val: &'a dyn ObjectTrait) -> impl OtherTrait<'a> {
90 val.use_self() //~ ERROR borrowed data escapes
95 trait OtherTrait<'a> {}
96 impl<'a> OtherTrait<'a> for &'a () {}
100 fn use_self(&self) -> &() { panic!() }
103 fn use_self(&self) -> &() { panic!() }
106 impl MyTrait for dyn ObjectTrait {}
107 impl Irrelevant for dyn ObjectTrait {}
109 fn use_it<'a>(val: &'a dyn ObjectTrait) -> impl OtherTrait<'a> + 'a {
110 MyTrait::use_self(val) //~ ERROR borrowed data escapes