1 // ignore-tidy-linelength
2 // aux-build:unstable_generic_param.rs
3 #![feature(unstable_default6)]
5 extern crate unstable_generic_param
;
7 use unstable_generic_param
::*;
12 fn foo() -> () { () }
// ok
17 impl Trait1
<usize> for S
{ //~ ERROR use of unstable library feature 'unstable_default'
18 fn foo() -> usize { 0 }
21 impl Trait1
<isize> for S
{ //~ ERROR use of unstable library feature 'unstable_default'
22 fn foo() -> isize { 0 }
25 impl Trait2
<usize> for S
{ //~ ERROR use of unstable library feature 'unstable_default'
26 fn foo() -> usize { 0 }
29 impl Trait3
<usize> for S
{
30 fn foo() -> usize { 0 }
// ok
36 let _
: Struct1
<isize> = Struct1 { field: 1 }
; //~ ERROR use of unstable library feature 'unstable_default'
38 let _
= STRUCT1
; // ok
39 let _
: Struct1
= STRUCT1
; // ok
40 let _
: Struct1
<usize> = STRUCT1
; //~ ERROR use of unstable library feature 'unstable_default'
41 let _
: Struct1
<isize> = Struct1 { field: 0 }
; //~ ERROR use of unstable library feature 'unstable_default'
43 // Instability is not enforced for generic type parameters used in public fields.
44 // Note how the unstable type default `usize` leaks,
45 // and can be used without the 'unstable_default' feature.
46 let _
= STRUCT1
.field
;
47 let _
= Struct1 { field: 1 }
;
48 let _
= Struct1 { field: () }
;
49 let _
= Struct1 { field: 1isize }
;
50 let _
: Struct1
= Struct1 { field: 1 }
;
51 let _
: usize = STRUCT1
.field
;
52 let _
= STRUCT1
.field
+ 1;
53 let _
= STRUCT1
.field
+ 1usize
;
55 let _
= Struct2 { field: 1 }
; // ok
56 let _
: Struct2
= Struct2 { field: 1 }
; // ok
57 let _
: Struct2
<usize> = Struct2 { field: 1 }
; // ok
60 let _
: Struct2
= STRUCT2
; // ok
61 let _
: Struct2
<usize> = STRUCT2
; // ok
62 let _
: Struct2
<isize> = Struct2 { field: 0 }
; // ok
63 let _
= STRUCT2
.field
; // ok
64 let _
: usize = STRUCT2
.field
; // ok
65 let _
= STRUCT2
.field
+ 1; // ok
66 let _
= STRUCT2
.field
+ 1usize
; // ok
69 let _
: Struct3
= STRUCT3
; // ok
70 let _
: Struct3
<isize, usize> = STRUCT3
; //~ ERROR use of unstable library feature 'unstable_default'
71 let _
: Struct3
<isize> = STRUCT3
; // ok
72 let _
: Struct3
<isize, isize> = Struct3 { field1: 0, field2: 0 }
; //~ ERROR use of unstable library feature 'unstable_default'
73 let _
: Struct3
<usize, usize> = Struct3 { field1: 0, field2: 0 }
; //~ ERROR use of unstable library feature 'unstable_default'
74 let _
= STRUCT3
.field1
; // ok
75 let _
: isize = STRUCT3
.field1
; // ok
76 let _
= STRUCT3
.field1
+ 1; // ok
77 // Note the aforementioned leak.
78 let _
: usize = STRUCT3
.field2
; // ok
79 let _
: Struct3
<usize> = Struct3 { field1: 0, field2: 0 }
; // ok
80 let _
= STRUCT3
.field2
+ 1; // ok
81 let _
= STRUCT3
.field2
+ 1usize
; // ok
84 let _
: Struct4
<isize> = Struct4 { field: 1 }
;
85 //~^ use of deprecated struct `unstable_generic_param::Struct4`: test [deprecated]
86 //~^^ use of deprecated struct `unstable_generic_param::Struct4`: test [deprecated]
87 //~^^^ use of deprecated field `unstable_generic_param::Struct4::field`: test [deprecated]
89 let _
: Struct4
= STRUCT4
; //~ use of deprecated struct `unstable_generic_param::Struct4`: test [deprecated]
90 let _
: Struct4
<usize> = STRUCT4
; //~ use of deprecated struct `unstable_generic_param::Struct4`: test [deprecated]
91 let _
: Struct4
<isize> = Struct4 { field: 0 }
;
92 //~^ use of deprecated struct `unstable_generic_param::Struct4`: test [deprecated]
93 //~^^ use of deprecated struct `unstable_generic_param::Struct4`: test [deprecated]
94 //~^^^ use of deprecated field `unstable_generic_param::Struct4::field`: test [deprecated]
97 let _
: Struct5
<isize> = Struct5 { field: 1 }
; //~ ERROR use of unstable library feature 'unstable_default'
98 //~^ use of deprecated struct `unstable_generic_param::Struct5`: test [deprecated]
99 //~^^ use of deprecated struct `unstable_generic_param::Struct5`: test [deprecated]
100 //~^^^ use of deprecated field `unstable_generic_param::Struct5::field`: test [deprecated]
102 let _
: Struct5
= STRUCT5
; //~ use of deprecated struct `unstable_generic_param::Struct5`: test [deprecated]
103 let _
: Struct5
<usize> = STRUCT5
; //~ ERROR use of unstable library feature 'unstable_default'
104 //~^ use of deprecated struct `unstable_generic_param::Struct5`: test [deprecated]
105 let _
: Struct5
<isize> = Struct5 { field: 0 }
; //~ ERROR use of unstable library feature 'unstable_default'
106 //~^ use of deprecated struct `unstable_generic_param::Struct5`: test [deprecated]
107 //~^^ use of deprecated struct `unstable_generic_param::Struct5`: test [deprecated]
108 //~^^^ use of deprecated field `unstable_generic_param::Struct5::field`: test [deprecated]
110 let _
: Struct6
<isize> = Struct6 { field: 1 }
; // ok
111 let _
: Struct6
<isize> = Struct6 { field: 0 }
; // ok
113 let _
: Alias1
<isize> = Alias1
::Some(1); //~ ERROR use of unstable library feature 'unstable_default'
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'
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
;
131 let _
= Alias2
::Some(1); // ok
132 let _
: Alias2
= Alias2
::Some(1); // ok
133 let _
: Alias2
<usize> = Alias2
::Some(1); // ok
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
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
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]
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]
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]
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]
182 let _
: Alias6
<isize> = Alias6
::Some(1); // ok
183 let _
: Alias6
<isize> = Alias6
::Some(0); // ok
185 let _
: Enum1
<isize> = Enum1
::Some(1); //~ ERROR use of unstable library feature 'unstable_default'
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'
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;}
203 let _
= Enum2
::Some(1); // ok
204 let _
: Enum2
= Enum2
::Some(1); // ok
205 let _
: Enum2
<usize> = Enum2
::Some(1); // ok
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
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
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]
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]
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]
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]
254 let _
: Enum6
<isize> = Enum6
::Some(1); // ok
255 let _
: Enum6
<isize> = Enum6
::Some(0); // ok
257 let _
: Box1
<isize, System
> = Box1
::new(1); //~ ERROR use of unstable library feature 'box_alloc_param'
258 let _
: Box1
<isize> = Box1
::new(1); // ok
260 let _
: Box2
<isize, System
> = Box2
::new(1); // ok
261 let _
: Box2
<isize> = Box2
::new(1); // ok
263 let _
: Box3
<isize> = Box3
::new(1); // ok