]>
Commit | Line | Data |
---|---|---|
1b1a35ee XL |
1 | // aux-build:unstable_generic_param.rs |
2 | #![feature(unstable_default6)] | |
3 | ||
4 | extern crate unstable_generic_param; | |
5 | ||
6 | use unstable_generic_param::*; | |
7 | ||
8 | struct R; | |
9 | ||
10 | impl Trait1 for S { | |
11 | fn foo() -> () { () } // ok | |
12 | } | |
13 | ||
14 | struct S; | |
15 | ||
1b1a35ee XL |
16 | impl Trait3<usize> for S { |
17 | fn foo() -> usize { 0 } // ok | |
18 | } | |
19 | ||
20 | fn main() { | |
21 | let _ = S; | |
22 | ||
23 | let _: Struct1<isize> = Struct1 { field: 1 }; //~ ERROR use of unstable library feature 'unstable_default' | |
24 | ||
25 | let _ = STRUCT1; // ok | |
26 | let _: Struct1 = STRUCT1; // ok | |
27 | let _: Struct1<usize> = STRUCT1; //~ ERROR use of unstable library feature 'unstable_default' | |
28 | let _: Struct1<isize> = Struct1 { field: 0 }; //~ ERROR use of unstable library feature 'unstable_default' | |
29 | ||
30 | // Instability is not enforced for generic type parameters used in public fields. | |
31 | // Note how the unstable type default `usize` leaks, | |
32 | // and can be used without the 'unstable_default' feature. | |
33 | let _ = STRUCT1.field; | |
34 | let _ = Struct1 { field: 1 }; | |
35 | let _ = Struct1 { field: () }; | |
36 | let _ = Struct1 { field: 1isize }; | |
37 | let _: Struct1 = Struct1 { field: 1 }; | |
38 | let _: usize = STRUCT1.field; | |
39 | let _ = STRUCT1.field + 1; | |
40 | let _ = STRUCT1.field + 1usize; | |
41 | ||
42 | let _ = Struct2 { field: 1 }; // ok | |
43 | let _: Struct2 = Struct2 { field: 1 }; // ok | |
44 | let _: Struct2<usize> = Struct2 { field: 1 }; // ok | |
45 | ||
46 | let _ = STRUCT2; | |
47 | let _: Struct2 = STRUCT2; // ok | |
48 | let _: Struct2<usize> = STRUCT2; // ok | |
49 | let _: Struct2<isize> = Struct2 { field: 0 }; // ok | |
50 | let _ = STRUCT2.field; // ok | |
51 | let _: usize = STRUCT2.field; // ok | |
52 | let _ = STRUCT2.field + 1; // ok | |
53 | let _ = STRUCT2.field + 1usize; // ok | |
54 | ||
55 | let _ = STRUCT3; | |
56 | let _: Struct3 = STRUCT3; // ok | |
57 | let _: Struct3<isize, usize> = STRUCT3; //~ ERROR use of unstable library feature 'unstable_default' | |
58 | let _: Struct3<isize> = STRUCT3; // ok | |
59 | let _: Struct3<isize, isize> = Struct3 { field1: 0, field2: 0 }; //~ ERROR use of unstable library feature 'unstable_default' | |
60 | let _: Struct3<usize, usize> = Struct3 { field1: 0, field2: 0 }; //~ ERROR use of unstable library feature 'unstable_default' | |
61 | let _ = STRUCT3.field1; // ok | |
62 | let _: isize = STRUCT3.field1; // ok | |
63 | let _ = STRUCT3.field1 + 1; // ok | |
64 | // Note the aforementioned leak. | |
65 | let _: usize = STRUCT3.field2; // ok | |
66 | let _: Struct3<usize> = Struct3 { field1: 0, field2: 0 }; // ok | |
67 | let _ = STRUCT3.field2 + 1; // ok | |
68 | let _ = STRUCT3.field2 + 1usize; // ok | |
69 | ||
70 | let _ = STRUCT4; | |
71 | let _: Struct4<isize> = Struct4 { field: 1 }; | |
72 | //~^ use of deprecated struct `unstable_generic_param::Struct4`: test [deprecated] | |
73 | //~^^ use of deprecated struct `unstable_generic_param::Struct4`: test [deprecated] | |
74 | //~^^^ use of deprecated field `unstable_generic_param::Struct4::field`: test [deprecated] | |
75 | let _ = STRUCT4; | |
76 | let _: Struct4 = STRUCT4; //~ use of deprecated struct `unstable_generic_param::Struct4`: test [deprecated] | |
77 | let _: Struct4<usize> = STRUCT4; //~ use of deprecated struct `unstable_generic_param::Struct4`: test [deprecated] | |
78 | let _: Struct4<isize> = Struct4 { field: 0 }; | |
79 | //~^ use of deprecated struct `unstable_generic_param::Struct4`: test [deprecated] | |
80 | //~^^ use of deprecated struct `unstable_generic_param::Struct4`: test [deprecated] | |
81 | //~^^^ use of deprecated field `unstable_generic_param::Struct4::field`: test [deprecated] | |
82 | ||
83 | let _ = STRUCT5; | |
84 | let _: Struct5<isize> = Struct5 { field: 1 }; //~ ERROR use of unstable library feature 'unstable_default' | |
85 | //~^ use of deprecated struct `unstable_generic_param::Struct5`: test [deprecated] | |
86 | //~^^ use of deprecated struct `unstable_generic_param::Struct5`: test [deprecated] | |
87 | //~^^^ use of deprecated field `unstable_generic_param::Struct5::field`: test [deprecated] | |
88 | let _ = STRUCT5; | |
89 | let _: Struct5 = STRUCT5; //~ use of deprecated struct `unstable_generic_param::Struct5`: test [deprecated] | |
90 | let _: Struct5<usize> = STRUCT5; //~ ERROR use of unstable library feature 'unstable_default' | |
91 | //~^ use of deprecated struct `unstable_generic_param::Struct5`: test [deprecated] | |
92 | let _: Struct5<isize> = Struct5 { field: 0 }; //~ ERROR use of unstable library feature 'unstable_default' | |
93 | //~^ use of deprecated struct `unstable_generic_param::Struct5`: test [deprecated] | |
94 | //~^^ use of deprecated struct `unstable_generic_param::Struct5`: test [deprecated] | |
95 | //~^^^ use of deprecated field `unstable_generic_param::Struct5::field`: test [deprecated] | |
96 | ||
97 | let _: Struct6<isize> = Struct6 { field: 1 }; // ok | |
98 | let _: Struct6<isize> = Struct6 { field: 0 }; // ok | |
99 | ||
100 | let _: Alias1<isize> = Alias1::Some(1); //~ ERROR use of unstable library feature 'unstable_default' | |
101 | ||
102 | let _ = ALIAS1; // ok | |
103 | let _: Alias1 = ALIAS1; // ok | |
104 | let _: Alias1<usize> = ALIAS1; //~ ERROR use of unstable library feature 'unstable_default' | |
105 | let _: Alias1<isize> = Alias1::Some(0); //~ ERROR use of unstable library feature 'unstable_default' | |
106 | ||
107 | // Instability is not enforced for generic type parameters used in public fields. | |
108 | // Note how the unstable type default `usize` leaks, | |
109 | // and can be used without the 'unstable_default' feature. | |
110 | let _ = Alias1::Some(1); | |
111 | let _ = Alias1::Some(()); | |
112 | let _ = Alias1::Some(1isize); | |
113 | let _: Alias1 = Alias1::Some(1); | |
114 | let _: usize = ALIAS1.unwrap(); | |
115 | let _ = ALIAS1.unwrap() + 1; | |
116 | let _ = ALIAS1.unwrap() + 1usize; | |
117 | ||
118 | let _ = Alias2::Some(1); // ok | |
119 | let _: Alias2 = Alias2::Some(1); // ok | |
120 | let _: Alias2<usize> = Alias2::Some(1); // ok | |
121 | ||
122 | let _ = ALIAS2; | |
123 | let _: Alias2 = ALIAS2; // ok | |
124 | let _: Alias2<usize> = ALIAS2; // ok | |
125 | let _: Alias2<isize> = Alias2::Some(0); // ok | |
126 | let _ = ALIAS2.unwrap(); // ok | |
127 | let _: usize = ALIAS2.unwrap(); // ok | |
128 | let _ = ALIAS2.unwrap() + 1; // ok | |
129 | let _ = ALIAS2.unwrap() + 1usize; // ok | |
130 | ||
131 | let _ = ALIAS3; | |
132 | let _: Alias3 = ALIAS3; // ok | |
133 | let _: Alias3<isize, usize> = ALIAS3; //~ ERROR use of unstable library feature 'unstable_default' | |
134 | let _: Alias3<isize> = ALIAS3; // ok | |
135 | let _: Alias3<isize, isize> = Alias3::Ok(0); //~ ERROR use of unstable library feature 'unstable_default' | |
136 | let _: Alias3<usize, usize> = Alias3::Ok(0); //~ ERROR use of unstable library feature 'unstable_default' | |
137 | let _ = ALIAS3.unwrap(); // ok | |
138 | let _: isize = ALIAS3.unwrap(); // ok | |
139 | let _ = ALIAS3.unwrap() + 1; // ok | |
140 | // Note the aforementioned leak. | |
141 | let _: usize = ALIAS3B.unwrap_err(); // ok | |
142 | let _: Alias3<usize> = Alias3::Err(0); // ok | |
143 | let _ = ALIAS3B.unwrap_err() + 1; // ok | |
144 | let _ = ALIAS3B.unwrap_err() + 1usize; // ok | |
145 | ||
146 | let _ = ALIAS4; | |
147 | let _: Alias4<isize> = Alias4::Some(1); | |
148 | //~^ use of deprecated type alias `unstable_generic_param::Alias4`: test [deprecated] | |
149 | //~^^ use of deprecated type alias `unstable_generic_param::Alias4`: test [deprecated] | |
150 | let _ = ALIAS4; | |
151 | let _: Alias4 = ALIAS4; //~ use of deprecated type alias `unstable_generic_param::Alias4`: test [deprecated] | |
152 | let _: Alias4<usize> = ALIAS4; //~ use of deprecated type alias `unstable_generic_param::Alias4`: test [deprecated] | |
153 | let _: Alias4<isize> = Alias4::Some(0); | |
154 | //~^ use of deprecated type alias `unstable_generic_param::Alias4`: test [deprecated] | |
155 | //~^^ use of deprecated type alias `unstable_generic_param::Alias4`: test [deprecated] | |
156 | ||
157 | let _ = ALIAS5; | |
158 | let _: Alias5<isize> = Alias5::Some(1); //~ ERROR use of unstable library feature 'unstable_default' | |
159 | //~^ use of deprecated type alias `unstable_generic_param::Alias5`: test [deprecated] | |
160 | //~^^ use of deprecated type alias `unstable_generic_param::Alias5`: test [deprecated] | |
161 | let _ = ALIAS5; | |
162 | let _: Alias5 = ALIAS5; //~ use of deprecated type alias `unstable_generic_param::Alias5`: test [deprecated] | |
163 | let _: Alias5<usize> = ALIAS5; //~ ERROR use of unstable library feature 'unstable_default' | |
164 | //~^ use of deprecated type alias `unstable_generic_param::Alias5`: test [deprecated] | |
165 | let _: Alias5<isize> = Alias5::Some(0); //~ ERROR use of unstable library feature 'unstable_default' | |
166 | //~^ use of deprecated type alias `unstable_generic_param::Alias5`: test [deprecated] | |
167 | //~^^ use of deprecated type alias `unstable_generic_param::Alias5`: test [deprecated] | |
168 | ||
169 | let _: Alias6<isize> = Alias6::Some(1); // ok | |
170 | let _: Alias6<isize> = Alias6::Some(0); // ok | |
171 | ||
172 | let _: Enum1<isize> = Enum1::Some(1); //~ ERROR use of unstable library feature 'unstable_default' | |
173 | ||
174 | let _ = ENUM1; // ok | |
175 | let _: Enum1 = ENUM1; // ok | |
176 | let _: Enum1<usize> = ENUM1; //~ ERROR use of unstable library feature 'unstable_default' | |
177 | let _: Enum1<isize> = Enum1::Some(0); //~ ERROR use of unstable library feature 'unstable_default' | |
178 | ||
179 | // Instability is not enforced for generic type parameters used in public fields. | |
180 | // Note how the unstable type default `usize` leaks, | |
181 | // and can be used without the 'unstable_default' feature. | |
182 | let _ = Enum1::Some(1); | |
183 | let _ = Enum1::Some(()); | |
184 | let _ = Enum1::Some(1isize); | |
185 | let _: Enum1 = Enum1::Some(1); | |
186 | if let Enum1::Some(x) = ENUM1 {let _: usize = x;} | |
187 | if let Enum1::Some(x) = ENUM1 {let _ = x + 1;} | |
188 | if let Enum1::Some(x) = ENUM1 {let _ = x + 1usize;} | |
189 | ||
190 | let _ = Enum2::Some(1); // ok | |
191 | let _: Enum2 = Enum2::Some(1); // ok | |
192 | let _: Enum2<usize> = Enum2::Some(1); // ok | |
193 | ||
194 | let _ = ENUM2; | |
195 | let _: Enum2 = ENUM2; // ok | |
196 | let _: Enum2<usize> = ENUM2; // ok | |
197 | let _: Enum2<isize> = Enum2::Some(0); // ok | |
198 | if let Enum2::Some(x) = ENUM2 {let _ = x;} // ok | |
199 | if let Enum2::Some(x) = ENUM2 {let _: usize = x;} // ok | |
200 | if let Enum2::Some(x) = ENUM2 {let _ = x + 1;} // ok | |
201 | if let Enum2::Some(x) = ENUM2 {let _ = x + 1usize;} // ok | |
202 | ||
203 | let _ = ENUM3; | |
204 | let _: Enum3 = ENUM3; // ok | |
205 | let _: Enum3<isize, usize> = ENUM3; //~ ERROR use of unstable library feature 'unstable_default' | |
206 | let _: Enum3<isize> = ENUM3; // ok | |
207 | let _: Enum3<isize, isize> = Enum3::Ok(0); //~ ERROR use of unstable library feature 'unstable_default' | |
208 | let _: Enum3<usize, usize> = Enum3::Ok(0); //~ ERROR use of unstable library feature 'unstable_default' | |
209 | if let Enum3::Ok(x) = ENUM3 {let _ = x;} // ok | |
210 | if let Enum3::Ok(x) = ENUM3 {let _: isize = x;} // ok | |
211 | if let Enum3::Ok(x) = ENUM3 {let _ = x + 1;} // ok | |
212 | // Note the aforementioned leak. | |
213 | if let Enum3::Err(x) = ENUM3B {let _: usize = x;} // ok | |
214 | let _: Enum3<usize> = Enum3::Err(0); // ok | |
215 | if let Enum3::Err(x) = ENUM3B {let _ = x + 1;} // ok | |
216 | if let Enum3::Err(x) = ENUM3B {let _ = x + 1usize;} // ok | |
217 | ||
218 | let _ = ENUM4; | |
219 | let _: Enum4<isize> = Enum4::Some(1); | |
ee023bcb | 220 | //~^ use of deprecated tuple variant `unstable_generic_param::Enum4::Some`: test [deprecated] |
1b1a35ee XL |
221 | //~^^ use of deprecated enum `unstable_generic_param::Enum4`: test [deprecated] |
222 | let _ = ENUM4; | |
223 | let _: Enum4 = ENUM4; //~ use of deprecated enum `unstable_generic_param::Enum4`: test [deprecated] | |
224 | let _: Enum4<usize> = ENUM4; //~ use of deprecated enum `unstable_generic_param::Enum4`: test [deprecated] | |
225 | let _: Enum4<isize> = Enum4::Some(0); | |
ee023bcb | 226 | //~^ use of deprecated tuple variant `unstable_generic_param::Enum4::Some`: test [deprecated] |
1b1a35ee XL |
227 | //~^^ use of deprecated enum `unstable_generic_param::Enum4`: test [deprecated] |
228 | ||
229 | let _ = ENUM5; | |
230 | let _: Enum5<isize> = Enum5::Some(1); //~ ERROR use of unstable library feature 'unstable_default' | |
ee023bcb | 231 | //~^ use of deprecated tuple variant `unstable_generic_param::Enum5::Some`: test [deprecated] |
1b1a35ee XL |
232 | //~^^ use of deprecated enum `unstable_generic_param::Enum5`: test [deprecated] |
233 | let _ = ENUM5; | |
234 | let _: Enum5 = ENUM5; //~ use of deprecated enum `unstable_generic_param::Enum5`: test [deprecated] | |
235 | let _: Enum5<usize> = ENUM5; //~ ERROR use of unstable library feature 'unstable_default' | |
236 | //~^ use of deprecated enum `unstable_generic_param::Enum5`: test [deprecated] | |
237 | let _: Enum5<isize> = Enum5::Some(0); //~ ERROR use of unstable library feature 'unstable_default' | |
ee023bcb | 238 | //~^ use of deprecated tuple variant `unstable_generic_param::Enum5::Some`: test [deprecated] |
1b1a35ee XL |
239 | //~^^ use of deprecated enum `unstable_generic_param::Enum5`: test [deprecated] |
240 | ||
241 | let _: Enum6<isize> = Enum6::Some(1); // ok | |
242 | let _: Enum6<isize> = Enum6::Some(0); // ok | |
243 | ||
244 | let _: Box1<isize, System> = Box1::new(1); //~ ERROR use of unstable library feature 'box_alloc_param' | |
245 | let _: Box1<isize> = Box1::new(1); // ok | |
246 | ||
247 | let _: Box2<isize, System> = Box2::new(1); // ok | |
248 | let _: Box2<isize> = Box2::new(1); // ok | |
249 | ||
250 | let _: Box3<isize> = Box3::new(1); // ok | |
251 | } |