1 // FIXME(nll): On NLL stabilization, this should replace
2 // `impl-on-dyn-trait-with-implicit-static-bound.rs`. Compiletest has
3 // problems with rustfix and revisions.
4 // ignore-compare-mode-nll
5 // compile-flags: -Zborrowck=mir
10 trait OtherTrait<'a> {}
11 impl<'a> OtherTrait<'a> for &'a () {}
13 trait ObjectTrait<T> {}
15 fn use_self<K>(&self) -> &();
19 impl<T> MyTrait<T> for dyn ObjectTrait<T> {
20 fn use_self<K>(&self) -> &() { panic!() }
22 impl<T> Irrelevant for dyn ObjectTrait<T> {}
24 fn use_it<'a, T>(val: &'a dyn ObjectTrait<T>) -> impl OtherTrait<'a> + 'a {
25 val.use_self::<T>() //~ ERROR borrowed data escapes
32 fn use_self(&self) -> &();
36 impl MyTrait for dyn ObjectTrait {
37 fn use_self(&self) -> &() { panic!() }
39 impl Irrelevant for dyn ObjectTrait {}
41 fn use_it<'a>(val: &'a dyn ObjectTrait) -> &'a () {
49 fn use_self(&self) -> &();
53 impl MyTrait for Box<dyn ObjectTrait> {
54 fn use_self(&self) -> &() { panic!() }
56 impl Irrelevant for Box<dyn ObjectTrait> {}
58 fn use_it<'a>(val: &'a Box<dyn ObjectTrait + 'a>) -> &'a () {
64 trait OtherTrait<'a> {}
65 impl<'a> OtherTrait<'a> for &'a () {}
69 impl dyn ObjectTrait {
70 fn use_self(&self) -> &() { panic!() }
73 fn use_it<'a>(val: &'a dyn ObjectTrait) -> impl OtherTrait<'a> + 'a {
75 //~^ ERROR borrowed data escapes
80 trait OtherTrait<'a> {}
81 impl<'a> OtherTrait<'a> for &'a () {}
85 fn use_self(&self) -> &() { panic!() }
88 fn use_self(&self) -> &() { panic!() }
91 impl MyTrait for dyn ObjectTrait {}
93 fn use_it<'a>(val: &'a dyn ObjectTrait) -> impl OtherTrait<'a> {
94 val.use_self() //~ ERROR borrowed data escapes
99 trait OtherTrait<'a> {}
100 impl<'a> OtherTrait<'a> for &'a () {}
104 fn use_self(&self) -> &() { panic!() }
107 fn use_self(&self) -> &() { panic!() }
110 impl MyTrait for dyn ObjectTrait {}
111 impl Irrelevant for dyn ObjectTrait {}
113 fn use_it<'a>(val: &'a dyn ObjectTrait) -> impl OtherTrait<'a> + 'a {
114 MyTrait::use_self(val) //~ ERROR borrowed data escapes