1
1
// run-pass
2
2
3
3
#![ feature( trait_upcasting) ]
4
+ #![ allow( incomplete_features) ]
4
5
5
6
trait Foo : PartialEq < i32 > + std:: fmt:: Debug + Send + Sync {
6
- fn a ( & self ) -> i32 { 10 }
7
+ fn a ( & self ) -> i32 {
8
+ 10
9
+ }
7
10
8
- fn z ( & self ) -> i32 { 11 }
11
+ fn z ( & self ) -> i32 {
12
+ 11
13
+ }
9
14
10
- fn y ( & self ) -> i32 { 12 }
15
+ fn y ( & self ) -> i32 {
16
+ 12
17
+ }
11
18
}
12
19
13
20
trait Bar1 : Foo {
14
- fn b ( & self ) -> i32 { 20 }
21
+ fn b ( & self ) -> i32 {
22
+ 20
23
+ }
15
24
16
- fn w ( & self ) -> i32 { 21 }
25
+ fn w ( & self ) -> i32 {
26
+ 21
27
+ }
17
28
}
18
29
19
30
trait Bar2 : Foo {
20
- fn c ( & self ) -> i32 { 30 }
31
+ fn c ( & self ) -> i32 {
32
+ 30
33
+ }
21
34
22
- fn v ( & self ) -> i32 { 31 }
35
+ fn v ( & self ) -> i32 {
36
+ 31
37
+ }
23
38
}
24
39
25
40
trait Baz : Bar1 + Bar2 {
26
- fn d ( & self ) -> i32 { 40 }
41
+ fn d ( & self ) -> i32 {
42
+ 40
43
+ }
27
44
}
28
45
29
46
impl Foo for i32 {
30
- fn a ( & self ) -> i32 { 100 }
47
+ fn a ( & self ) -> i32 {
48
+ 100
49
+ }
31
50
}
32
51
33
52
impl Bar1 for i32 {
34
- fn b ( & self ) -> i32 { 200 }
53
+ fn b ( & self ) -> i32 {
54
+ 200
55
+ }
35
56
}
36
57
37
58
impl Bar2 for i32 {
38
- fn c ( & self ) -> i32 { 300 }
59
+ fn c ( & self ) -> i32 {
60
+ 300
61
+ }
39
62
}
40
63
41
64
impl Baz for i32 {
42
- fn d ( & self ) -> i32 { 400 }
65
+ fn d ( & self ) -> i32 {
66
+ 400
67
+ }
43
68
}
44
69
45
70
fn main ( ) {
46
71
let baz: & dyn Baz = & 1 ;
47
72
let _: & dyn std:: fmt:: Debug = baz;
48
- let _: & ( dyn Send + Sync ) = baz;
49
- let _: & dyn Send = baz;
50
- let _: & dyn Sync = baz;
51
73
assert_eq ! ( * baz, 1 ) ;
52
74
assert_eq ! ( baz. a( ) , 100 ) ;
53
75
assert_eq ! ( baz. b( ) , 200 ) ;
@@ -60,9 +82,6 @@ fn main() {
60
82
61
83
let bar1: & dyn Bar1 = baz;
62
84
let _: & dyn std:: fmt:: Debug = bar1;
63
- let _: & ( dyn Send + Sync ) = bar1;
64
- let _: & dyn Send = bar1;
65
- let _: & dyn Sync = bar1;
66
85
assert_eq ! ( * bar1, 1 ) ;
67
86
assert_eq ! ( bar1. a( ) , 100 ) ;
68
87
assert_eq ! ( bar1. b( ) , 200 ) ;
@@ -72,9 +91,6 @@ fn main() {
72
91
73
92
let bar2: & dyn Bar2 = baz;
74
93
let _: & dyn std:: fmt:: Debug = bar2;
75
- let _: & ( dyn Send + Sync ) = bar2;
76
- let _: & dyn Send = bar2;
77
- let _: & dyn Sync = bar2;
78
94
assert_eq ! ( * bar2, 1 ) ;
79
95
assert_eq ! ( bar2. a( ) , 100 ) ;
80
96
assert_eq ! ( bar2. c( ) , 300 ) ;
@@ -84,25 +100,16 @@ fn main() {
84
100
85
101
let foo: & dyn Foo = baz;
86
102
let _: & dyn std:: fmt:: Debug = foo;
87
- let _: & ( dyn Send + Sync ) = foo;
88
- let _: & dyn Send = foo;
89
- let _: & dyn Sync = foo;
90
103
assert_eq ! ( * foo, 1 ) ;
91
104
assert_eq ! ( foo. a( ) , 100 ) ;
92
105
93
106
let foo: & dyn Foo = bar1;
94
107
let _: & dyn std:: fmt:: Debug = foo;
95
- let _: & ( dyn Send + Sync ) = foo;
96
- let _: & dyn Send = foo;
97
- let _: & dyn Sync = foo;
98
108
assert_eq ! ( * foo, 1 ) ;
99
109
assert_eq ! ( foo. a( ) , 100 ) ;
100
110
101
111
let foo: & dyn Foo = bar2;
102
112
let _: & dyn std:: fmt:: Debug = foo;
103
- let _: & ( dyn Send + Sync ) = foo;
104
- let _: & dyn Send = foo;
105
- let _: & dyn Sync = foo;
106
113
assert_eq ! ( * foo, 1 ) ;
107
114
assert_eq ! ( foo. a( ) , 100 ) ;
108
115
}
0 commit comments