]> git.lizzy.rs Git - rust.git/blob - tests/ui/traits/trait-upcasting/type-checking-test-4.rs
Rollup merge of #106714 - Ezrashaw:remove-e0490, r=davidtwco
[rust.git] / tests / ui / traits / trait-upcasting / type-checking-test-4.rs
1 #![feature(trait_upcasting)]
2
3 trait Foo<'a>: Bar<'a, 'a> {}
4 trait Bar<'a, 'b> {
5     fn get_b(&self) -> Option<&'a u32> {
6         None
7     }
8 }
9
10 fn test_correct(x: &dyn Foo<'static>) {
11     let _ = x as &dyn Bar<'static, 'static>;
12 }
13
14 fn test_wrong1<'a>(x: &dyn Foo<'static>, y: &'a u32) {
15     let _ = x as &dyn Bar<'static, 'a>; // Error
16                                         //~^ ERROR lifetime may not live long enough
17 }
18
19 fn test_wrong2<'a>(x: &dyn Foo<'static>, y: &'a u32) {
20     let _ = x as &dyn Bar<'a, 'static>; // Error
21                                         //~^ ERROR lifetime may not live long enough
22 }
23
24 fn test_wrong3<'a>(x: &dyn Foo<'a>) -> Option<&'static u32> {
25     let y = x as &dyn Bar<'_, '_>;
26     y.get_b() // ERROR
27               //~^ ERROR lifetime may not live long enough
28 }
29
30 fn test_wrong4<'a>(x: &dyn Foo<'a>) -> Option<&'static u32> {
31     <_ as Bar>::get_b(x) // ERROR
32                          //~^ ERROR lifetime may not live long enough
33 }
34
35 fn test_wrong5<'a>(x: &dyn Foo<'a>) -> Option<&'static u32> {
36     <_ as Bar<'_, '_>>::get_b(x) // ERROR
37                                  //~^ ERROR lifetime may not live long enough
38 }
39
40 fn test_wrong6<'a>(x: &dyn Foo<'a>) -> Option<&'static u32> {
41     let y = x as &dyn Bar<'_, '_>;
42     y.get_b(); // ERROR
43     let z = y;
44     z.get_b() // ERROR
45               //~^ ERROR lifetime may not live long enough
46 }
47
48 fn main() {}