@@ -110,6 +110,150 @@ fn main() {
110
110
let _: Struct6 < isize > = Struct6 { field : 1 } ; // ok
111
111
let _: Struct6 < isize > = Struct6 { field : 0 } ; // ok
112
112
113
+ let _: Alias1 < isize > = Alias1 :: Some ( 1 ) ; //~ ERROR use of unstable library feature 'unstable_default'
114
+
115
+ let _ = ALIAS1 ; // ok
116
+ let _: Alias1 = ALIAS1 ; // ok
117
+ let _: Alias1 < usize > = ALIAS1 ; //~ ERROR use of unstable library feature 'unstable_default'
118
+ let _: Alias1 < isize > = Alias1 :: Some ( 0 ) ; //~ ERROR use of unstable library feature 'unstable_default'
119
+
120
+ // Instability is not enforced for generic type parameters used in public fields.
121
+ // Note how the unstable type default `usize` leaks,
122
+ // and can be used without the 'unstable_default' feature.
123
+ let _ = Alias1 :: Some ( 1 ) ;
124
+ let _ = Alias1 :: Some ( ( ) ) ;
125
+ let _ = Alias1 :: Some ( 1isize ) ;
126
+ let _: Alias1 = Alias1 :: Some ( 1 ) ;
127
+ let _: usize = ALIAS1 . unwrap ( ) ;
128
+ let _ = ALIAS1 . unwrap ( ) + 1 ;
129
+ let _ = ALIAS1 . unwrap ( ) + 1usize ;
130
+
131
+ let _ = Alias2 :: Some ( 1 ) ; // ok
132
+ let _: Alias2 = Alias2 :: Some ( 1 ) ; // ok
133
+ let _: Alias2 < usize > = Alias2 :: Some ( 1 ) ; // ok
134
+
135
+ let _ = ALIAS2 ;
136
+ let _: Alias2 = ALIAS2 ; // ok
137
+ let _: Alias2 < usize > = ALIAS2 ; // ok
138
+ let _: Alias2 < isize > = Alias2 :: Some ( 0 ) ; // ok
139
+ let _ = ALIAS2 . unwrap ( ) ; // ok
140
+ let _: usize = ALIAS2 . unwrap ( ) ; // ok
141
+ let _ = ALIAS2 . unwrap ( ) + 1 ; // ok
142
+ let _ = ALIAS2 . unwrap ( ) + 1usize ; // ok
143
+
144
+ let _ = ALIAS3 ;
145
+ let _: Alias3 = ALIAS3 ; // ok
146
+ let _: Alias3 < isize , usize > = ALIAS3 ; //~ ERROR use of unstable library feature 'unstable_default'
147
+ let _: Alias3 < isize > = ALIAS3 ; // ok
148
+ let _: Alias3 < isize , isize > = Alias3 :: Ok ( 0 ) ; //~ ERROR use of unstable library feature 'unstable_default'
149
+ let _: Alias3 < usize , usize > = Alias3 :: Ok ( 0 ) ; //~ ERROR use of unstable library feature 'unstable_default'
150
+ let _ = ALIAS3 . unwrap ( ) ; // ok
151
+ let _: isize = ALIAS3 . unwrap ( ) ; // ok
152
+ let _ = ALIAS3 . unwrap ( ) + 1 ; // ok
153
+ // Note the aforementioned leak.
154
+ let _: usize = ALIAS3B . unwrap_err ( ) ; // ok
155
+ let _: Alias3 < usize > = Alias3 :: Err ( 0 ) ; // ok
156
+ let _ = ALIAS3B . unwrap_err ( ) + 1 ; // ok
157
+ let _ = ALIAS3B . unwrap_err ( ) + 1usize ; // ok
158
+
159
+ let _ = ALIAS4 ;
160
+ let _: Alias4 < isize > = Alias4 :: Some ( 1 ) ;
161
+ //~^ use of deprecated type alias `unstable_generic_param::Alias4`: test [deprecated]
162
+ //~^^ use of deprecated type alias `unstable_generic_param::Alias4`: test [deprecated]
163
+ let _ = ALIAS4 ;
164
+ let _: Alias4 = ALIAS4 ; //~ use of deprecated type alias `unstable_generic_param::Alias4`: test [deprecated]
165
+ let _: Alias4 < usize > = ALIAS4 ; //~ use of deprecated type alias `unstable_generic_param::Alias4`: test [deprecated]
166
+ let _: Alias4 < isize > = Alias4 :: Some ( 0 ) ;
167
+ //~^ use of deprecated type alias `unstable_generic_param::Alias4`: test [deprecated]
168
+ //~^^ use of deprecated type alias `unstable_generic_param::Alias4`: test [deprecated]
169
+
170
+ let _ = ALIAS5 ;
171
+ let _: Alias5 < isize > = Alias5 :: Some ( 1 ) ; //~ ERROR use of unstable library feature 'unstable_default'
172
+ //~^ use of deprecated type alias `unstable_generic_param::Alias5`: test [deprecated]
173
+ //~^^ use of deprecated type alias `unstable_generic_param::Alias5`: test [deprecated]
174
+ let _ = ALIAS5 ;
175
+ let _: Alias5 = ALIAS5 ; //~ use of deprecated type alias `unstable_generic_param::Alias5`: test [deprecated]
176
+ let _: Alias5 < usize > = ALIAS5 ; //~ ERROR use of unstable library feature 'unstable_default'
177
+ //~^ use of deprecated type alias `unstable_generic_param::Alias5`: test [deprecated]
178
+ let _: Alias5 < isize > = Alias5 :: Some ( 0 ) ; //~ ERROR use of unstable library feature 'unstable_default'
179
+ //~^ use of deprecated type alias `unstable_generic_param::Alias5`: test [deprecated]
180
+ //~^^ use of deprecated type alias `unstable_generic_param::Alias5`: test [deprecated]
181
+
182
+ let _: Alias6 < isize > = Alias6 :: Some ( 1 ) ; // ok
183
+ let _: Alias6 < isize > = Alias6 :: Some ( 0 ) ; // ok
184
+
185
+ let _: Enum1 < isize > = Enum1 :: Some ( 1 ) ; //~ ERROR use of unstable library feature 'unstable_default'
186
+
187
+ let _ = ENUM1 ; // ok
188
+ let _: Enum1 = ENUM1 ; // ok
189
+ let _: Enum1 < usize > = ENUM1 ; //~ ERROR use of unstable library feature 'unstable_default'
190
+ let _: Enum1 < isize > = Enum1 :: Some ( 0 ) ; //~ ERROR use of unstable library feature 'unstable_default'
191
+
192
+ // Instability is not enforced for generic type parameters used in public fields.
193
+ // Note how the unstable type default `usize` leaks,
194
+ // and can be used without the 'unstable_default' feature.
195
+ let _ = Enum1 :: Some ( 1 ) ;
196
+ let _ = Enum1 :: Some ( ( ) ) ;
197
+ let _ = Enum1 :: Some ( 1isize ) ;
198
+ let _: Enum1 = Enum1 :: Some ( 1 ) ;
199
+ if let Enum1 :: Some ( x) = ENUM1 { let _: usize = x; }
200
+ if let Enum1 :: Some ( x) = ENUM1 { let _ = x + 1 ; }
201
+ if let Enum1 :: Some ( x) = ENUM1 { let _ = x + 1usize ; }
202
+
203
+ let _ = Enum2 :: Some ( 1 ) ; // ok
204
+ let _: Enum2 = Enum2 :: Some ( 1 ) ; // ok
205
+ let _: Enum2 < usize > = Enum2 :: Some ( 1 ) ; // ok
206
+
207
+ let _ = ENUM2 ;
208
+ let _: Enum2 = ENUM2 ; // ok
209
+ let _: Enum2 < usize > = ENUM2 ; // ok
210
+ let _: Enum2 < isize > = Enum2 :: Some ( 0 ) ; // ok
211
+ if let Enum2 :: Some ( x) = ENUM2 { let _ = x; } // ok
212
+ if let Enum2 :: Some ( x) = ENUM2 { let _: usize = x; } // ok
213
+ if let Enum2 :: Some ( x) = ENUM2 { let _ = x + 1 ; } // ok
214
+ if let Enum2 :: Some ( x) = ENUM2 { let _ = x + 1usize ; } // ok
215
+
216
+ let _ = ENUM3 ;
217
+ let _: Enum3 = ENUM3 ; // ok
218
+ let _: Enum3 < isize , usize > = ENUM3 ; //~ ERROR use of unstable library feature 'unstable_default'
219
+ let _: Enum3 < isize > = ENUM3 ; // ok
220
+ let _: Enum3 < isize , isize > = Enum3 :: Ok ( 0 ) ; //~ ERROR use of unstable library feature 'unstable_default'
221
+ let _: Enum3 < usize , usize > = Enum3 :: Ok ( 0 ) ; //~ ERROR use of unstable library feature 'unstable_default'
222
+ if let Enum3 :: Ok ( x) = ENUM3 { let _ = x; } // ok
223
+ if let Enum3 :: Ok ( x) = ENUM3 { let _: isize = x; } // ok
224
+ if let Enum3 :: Ok ( x) = ENUM3 { let _ = x + 1 ; } // ok
225
+ // Note the aforementioned leak.
226
+ if let Enum3 :: Err ( x) = ENUM3B { let _: usize = x; } // ok
227
+ let _: Enum3 < usize > = Enum3 :: Err ( 0 ) ; // ok
228
+ if let Enum3 :: Err ( x) = ENUM3B { let _ = x + 1 ; } // ok
229
+ if let Enum3 :: Err ( x) = ENUM3B { let _ = x + 1usize ; } // ok
230
+
231
+ let _ = ENUM4 ;
232
+ let _: Enum4 < isize > = Enum4 :: Some ( 1 ) ;
233
+ //~^ use of deprecated variant `unstable_generic_param::Enum4::Some`: test [deprecated]
234
+ //~^^ use of deprecated enum `unstable_generic_param::Enum4`: test [deprecated]
235
+ let _ = ENUM4 ;
236
+ let _: Enum4 = ENUM4 ; //~ use of deprecated enum `unstable_generic_param::Enum4`: test [deprecated]
237
+ let _: Enum4 < usize > = ENUM4 ; //~ use of deprecated enum `unstable_generic_param::Enum4`: test [deprecated]
238
+ let _: Enum4 < isize > = Enum4 :: Some ( 0 ) ;
239
+ //~^ use of deprecated variant `unstable_generic_param::Enum4::Some`: test [deprecated]
240
+ //~^^ use of deprecated enum `unstable_generic_param::Enum4`: test [deprecated]
241
+
242
+ let _ = ENUM5 ;
243
+ let _: Enum5 < isize > = Enum5 :: Some ( 1 ) ; //~ ERROR use of unstable library feature 'unstable_default'
244
+ //~^ use of deprecated variant `unstable_generic_param::Enum5::Some`: test [deprecated]
245
+ //~^^ use of deprecated enum `unstable_generic_param::Enum5`: test [deprecated]
246
+ let _ = ENUM5 ;
247
+ let _: Enum5 = ENUM5 ; //~ use of deprecated enum `unstable_generic_param::Enum5`: test [deprecated]
248
+ let _: Enum5 < usize > = ENUM5 ; //~ ERROR use of unstable library feature 'unstable_default'
249
+ //~^ use of deprecated enum `unstable_generic_param::Enum5`: test [deprecated]
250
+ let _: Enum5 < isize > = Enum5 :: Some ( 0 ) ; //~ ERROR use of unstable library feature 'unstable_default'
251
+ //~^ use of deprecated variant `unstable_generic_param::Enum5::Some`: test [deprecated]
252
+ //~^^ use of deprecated enum `unstable_generic_param::Enum5`: test [deprecated]
253
+
254
+ let _: Enum6 < isize > = Enum6 :: Some ( 1 ) ; // ok
255
+ let _: Enum6 < isize > = Enum6 :: Some ( 0 ) ; // ok
256
+
113
257
let _: Box1 < isize , System > = Box1 :: new ( 1 ) ; //~ ERROR use of unstable library feature 'box_alloc_param'
114
258
let _: Box1 < isize > = Box1 :: new ( 1 ) ; // ok
115
259
0 commit comments