]> git.proxmox.com Git - rustc.git/blame - src/test/ui/traits/alias/no-extra-traits.rs
Merge tag 'debian/1.52.1+dfsg1-1_exp2' into proxmox/buster
[rustc.git] / src / test / ui / traits / alias / no-extra-traits.rs
CommitLineData
dc9dc135
XL
1// The purpose of this test is to demonstrate that trait alias expansion
2// preserves the rule that `dyn Trait` may only reference one non-auto trait.
3
4#![feature(trait_alias)]
5
6use std::marker::Unpin;
7
8// Some arbitrary object-safe traits:
9trait ObjA {}
10trait ObjB {}
11
12// Nest a few levels deep:
13trait _0 = ObjA;
14trait _1 = _0;
15
16type _T00 = dyn _0 + ObjB;
17//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
18
19type _T01 = dyn ObjB + _0;
20//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
21
22type _T02 = dyn ObjB + _1;
23//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
24
25type _T03 = dyn _1 + ObjB;
26//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
27
28// Nest some more and in weird ways:
29
30trait _2 = ObjB;
31trait _3 = _2;
32trait _4 = _3;
33
34type _T10 = dyn _2 + _3;
35//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
36
37type _T11 = dyn _3 + _2;
38//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
39
40type _T12 = dyn _2 + _4;
41//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
42
43type _T13 = dyn _4 + _2;
44//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
45
46// Include auto traits:
47
48trait _5 = Sync + ObjB + Send;
49
50type _T20 = dyn _5 + _1;
51//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
52
53type _T21 = dyn _1 + _5;
54//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
55
56type _T22 = dyn _5 + ObjA;
57//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
58
59type _T23 = dyn ObjA + _5;
60//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
61
62type _T24 = dyn Send + _5 + _1 + Sync;
63//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
64
65type _T25 = dyn _1 + Sync + _5 + Send;
66//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
67
68type _T26 = dyn Sync + Send + _5 + ObjA;
69//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
70
71type _T27 = dyn Send + Sync + ObjA + _5;
72//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
73
74// Also nest:
75
76trait _6 = _1 + _5;
77trait _7 = _6;
78trait _8 = _7;
79
80type _T30 = dyn _6;
81//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
82
83type _T31 = dyn _6 + Send;
84//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
85
86type _T32 = dyn Send + _6;
87//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
88
89type _T33 = dyn _8;
90//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
91
92type _T34 = dyn _8 + Send;
93//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
94
95type _T35 = dyn Send + _8;
96//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
97
98// Nest some more:
99
100trait _9 = _5 + Sync;
101trait _10 = Unpin + _9;
102
103type _T40 = dyn _10 + ObjA;
104//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
105
106type _T41 = dyn ObjA + _10;
107//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
108
109type _T42 = dyn _10 + _1;
110//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
111
112type _T43 = dyn Send + _10 + Sync + ObjA;
113//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
114
115type _T44 = dyn ObjA + _10 + Send + Sync;
116//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
117
118type _T45 = dyn Sync + Send + _10 + _1;
119//~^ ERROR only auto traits can be used as additional traits in a trait object [E0225]
120
121fn main() {}