1 #![feature(trait_upcasting)]
2 #![allow(incomplete_features)]
3 
4 trait Foo {
a(&self) -> i325     fn a(&self) -> i32 {
6         10
7     }
8 
z(&self) -> i329     fn z(&self) -> i32 {
10         11
11     }
12 
y(&self) -> i3213     fn y(&self) -> i32 {
14         12
15     }
16 }
17 
18 trait Bar {
b(&self) -> i3219     fn b(&self) -> i32 {
20         20
21     }
22 
w(&self) -> i3223     fn w(&self) -> i32 {
24         21
25     }
26 }
27 
28 trait Baz {
c(&self) -> i3229     fn c(&self) -> i32 {
30         30
31     }
32 }
33 
34 impl Foo for i32 {
a(&self) -> i3235     fn a(&self) -> i32 {
36         100
37     }
38 }
39 
40 impl Bar for i32 {
b(&self) -> i3241     fn b(&self) -> i32 {
42         200
43     }
44 }
45 
46 impl Baz for i32 {
c(&self) -> i3247     fn c(&self) -> i32 {
48         300
49     }
50 }
51 
main()52 fn main() {
53     let baz: &dyn Baz = &1;
54     let _: &dyn std::fmt::Debug = baz;
55     //~^ ERROR mismatched types [E0308]
56     let _: &dyn Send = baz;
57     //~^ ERROR mismatched types [E0308]
58     let _: &dyn Sync = baz;
59     //~^ ERROR mismatched types [E0308]
60 
61     let bar: &dyn Bar = baz;
62     //~^ ERROR mismatched types [E0308]
63     let _: &dyn std::fmt::Debug = bar;
64     //~^ ERROR mismatched types [E0308]
65     let _: &dyn Send = bar;
66     //~^ ERROR mismatched types [E0308]
67     let _: &dyn Sync = bar;
68     //~^ ERROR mismatched types [E0308]
69 
70     let foo: &dyn Foo = baz;
71     //~^ ERROR mismatched types [E0308]
72     let _: &dyn std::fmt::Debug = foo;
73     //~^ ERROR mismatched types [E0308]
74     let _: &dyn Send = foo;
75     //~^ ERROR mismatched types [E0308]
76     let _: &dyn Sync = foo;
77     //~^ ERROR mismatched types [E0308]
78 
79     let foo: &dyn Foo = bar;
80     //~^ ERROR mismatched types [E0308]
81     let _: &dyn std::fmt::Debug = foo;
82     //~^ ERROR mismatched types [E0308]
83     let _: &dyn Send = foo;
84     //~^ ERROR mismatched types [E0308]
85     let _: &dyn Sync = foo;
86     //~^ ERROR mismatched types [E0308]
87 }
88