@@ -110,6 +110,150 @@ fn main() {
110110 let _: Struct6 < isize > = Struct6 { field : 1 } ; // ok
111111 let _: Struct6 < isize > = Struct6 { field : 0 } ; // ok
112112
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+
113257 let _: Box1 < isize , System > = Box1 :: new ( 1 ) ; //~ ERROR use of unstable library feature 'box_alloc_param'
114258 let _: Box1 < isize > = Box1 :: new ( 1 ) ; // ok
115259
0 commit comments