]> git.proxmox.com Git - rustc.git/blob - src/test/ui/typeck/typeck_type_placeholder_item.rs
New upstream version 1.44.1+dfsg1
[rustc.git] / src / test / ui / typeck / typeck_type_placeholder_item.rs
1 // Needed for `type Y = impl Trait<_>` and `type B = _;`
2 #![feature(type_alias_impl_trait, associated_type_defaults)]
3 // This test checks that it is not possible to enable global type
4 // inference by using the `_` type placeholder.
5
6 fn test() -> _ { 5 }
7 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
8
9 fn test2() -> (_, _) { (5, 5) }
10 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
11
12 static TEST3: _ = "test";
13 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
14
15 static TEST4: _ = 145;
16 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
17
18 static TEST5: (_, _) = (1, 2);
19 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
20
21 fn test6(_: _) { }
22 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
23
24 fn test6_b<T>(_: _, _: T) { }
25 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
26
27 fn test6_c<T, K, L, A, B>(_: _, _: (T, K, L, A, B)) { }
28 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
29
30 fn test7(x: _) { let _x: usize = x; }
31 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
32
33 fn test8(_f: fn() -> _) { }
34 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
35
36 struct Test9;
37
38 impl Test9 {
39 fn test9(&self) -> _ { () }
40 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
41
42 fn test10(&self, _x : _) { }
43 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
44 }
45
46 fn test11(x: &usize) -> &_ {
47 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
48 &x
49 }
50
51 unsafe fn test12(x: *const usize) -> *const *const _ {
52 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
53 &x
54 }
55
56 impl Clone for Test9 {
57 fn clone(&self) -> _ { Test9 }
58 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
59
60 fn clone_from(&mut self, other: _) { *self = Test9; }
61 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
62 }
63
64 struct Test10 {
65 a: _,
66 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
67 b: (_, _),
68 }
69
70 pub fn main() {
71 static A = 42;
72 //~^ ERROR missing type for `static` item
73 static B: _ = 42;
74 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
75 static C: Option<_> = Some(42);
76 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
77
78 fn fn_test() -> _ { 5 }
79 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
80
81 fn fn_test2() -> (_, _) { (5, 5) }
82 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
83
84 static FN_TEST3: _ = "test";
85 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
86
87 static FN_TEST4: _ = 145;
88 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
89
90 static FN_TEST5: (_, _) = (1, 2);
91 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
92
93 fn fn_test6(_: _) { }
94 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
95
96 fn fn_test7(x: _) { let _x: usize = x; }
97 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
98
99 fn fn_test8(_f: fn() -> _) { }
100 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
101
102 struct FnTest9;
103
104 impl FnTest9 {
105 fn fn_test9(&self) -> _ { () }
106 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
107
108 fn fn_test10(&self, _x : _) { }
109 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
110 }
111
112 impl Clone for FnTest9 {
113 fn clone(&self) -> _ { FnTest9 }
114 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
115
116 fn clone_from(&mut self, other: _) { *self = FnTest9; }
117 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
118 }
119
120 struct FnTest10 {
121 a: _,
122 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
123 b: (_, _),
124 }
125
126 fn fn_test11(_: _) -> (_, _) { panic!() }
127 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
128 //~| ERROR type annotations needed
129
130 fn fn_test12(x: i32) -> (_, _) { (x, x) }
131 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
132
133 fn fn_test13(x: _) -> (i32, _) { (x, x) }
134 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
135 }
136
137 trait T {
138 fn method_test1(&self, x: _);
139 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
140 fn method_test2(&self, x: _) -> _;
141 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
142 fn method_test3(&self) -> _;
143 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
144 fn assoc_fn_test1(x: _);
145 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
146 fn assoc_fn_test2(x: _) -> _;
147 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
148 fn assoc_fn_test3() -> _;
149 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
150 }
151
152 struct BadStruct<_>(_);
153 //~^ ERROR expected identifier, found reserved identifier `_`
154 //~| ERROR the type placeholder `_` is not allowed within types on item signatures
155 trait BadTrait<_> {}
156 //~^ ERROR expected identifier, found reserved identifier `_`
157 impl BadTrait<_> for BadStruct<_> {}
158 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
159
160 fn impl_trait() -> impl BadTrait<_> {
161 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
162 unimplemented!()
163 }
164
165 struct BadStruct1<_, _>(_);
166 //~^ ERROR expected identifier, found reserved identifier `_`
167 //~| ERROR expected identifier, found reserved identifier `_`
168 //~| ERROR the name `_` is already used
169 //~| ERROR the type placeholder `_` is not allowed within types on item signatures
170 struct BadStruct2<_, T>(_, T);
171 //~^ ERROR expected identifier, found reserved identifier `_`
172 //~| ERROR the type placeholder `_` is not allowed within types on item signatures
173
174 type X = Box<_>;
175 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
176
177 struct Struct;
178 trait Trait<T> {}
179 impl Trait<usize> for Struct {}
180 type Y = impl Trait<_>;
181 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
182 fn foo() -> Y {
183 Struct
184 }
185
186 trait Qux {
187 type A;
188 type B = _;
189 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
190 const C: _;
191 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
192 const D: _ = 42;
193 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
194 // type E: _; // FIXME: make the parser propagate the existence of `B`
195 }
196 impl Qux for Struct {
197 type A = _;
198 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
199 type B = _;
200 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
201 const C: _;
202 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
203 //~| ERROR associated constant in `impl` without body
204 const D: _ = 42;
205 //~^ ERROR the type placeholder `_` is not allowed within types on item signatures
206 }