error: expected identifier, found reserved identifier `_`
  --> $DIR/typeck_type_placeholder_item.rs:152:18
   |
LL | struct BadStruct<_>(_);
   |                  ^ expected identifier, found reserved identifier

error: expected identifier, found reserved identifier `_`
  --> $DIR/typeck_type_placeholder_item.rs:155:16
   |
LL | trait BadTrait<_> {}
   |                ^ expected identifier, found reserved identifier

error: expected identifier, found reserved identifier `_`
  --> $DIR/typeck_type_placeholder_item.rs:165:19
   |
LL | struct BadStruct1<_, _>(_);
   |                   ^ expected identifier, found reserved identifier

error: expected identifier, found reserved identifier `_`
  --> $DIR/typeck_type_placeholder_item.rs:165:22
   |
LL | struct BadStruct1<_, _>(_);
   |                      ^ expected identifier, found reserved identifier

error: expected identifier, found reserved identifier `_`
  --> $DIR/typeck_type_placeholder_item.rs:170:19
   |
LL | struct BadStruct2<_, T>(_, T);
   |                   ^ expected identifier, found reserved identifier

error: associated constant in `impl` without body
  --> $DIR/typeck_type_placeholder_item.rs:201:5
   |
LL |     const C: _;
   |     ^^^^^^^^^^-
   |               |
   |               help: provide a definition for the constant: `= <expr>;`

error[E0403]: the name `_` is already used for a generic parameter in this item's generic parameters
  --> $DIR/typeck_type_placeholder_item.rs:165:22
   |
LL | struct BadStruct1<_, _>(_);
   |                   -  ^ already used
   |                   |
   |                   first use of `_`

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:6:14
   |
LL | fn test() -> _ { 5 }
   |              ^
   |              |
   |              not allowed in type signatures
   |              help: replace with the correct return type: `i32`

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:9:16
   |
LL | fn test2() -> (_, _) { (5, 5) }
   |               -^--^-
   |               ||  |
   |               ||  not allowed in type signatures
   |               |not allowed in type signatures
   |               help: replace with the correct return type: `(i32, i32)`

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:12:15
   |
LL | static TEST3: _ = "test";
   |               ^
   |               |
   |               not allowed in type signatures
   |               help: replace `_` with the correct type: `&str`

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:15:15
   |
LL | static TEST4: _ = 145;
   |               ^
   |               |
   |               not allowed in type signatures
   |               help: replace `_` with the correct type: `i32`

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:18:15
   |
LL | static TEST5: (_, _) = (1, 2);
   |               ^^^^^^ not allowed in type signatures

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:21:13
   |
LL | fn test6(_: _) { }
   |             ^ not allowed in type signatures
   |
help: use type parameters instead
   |
LL | fn test6<T>(_: T) { }
   |         ^^^    ^

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:24:18
   |
LL | fn test6_b<T>(_: _, _: T) { }
   |                  ^ not allowed in type signatures
   |
help: use type parameters instead
   |
LL | fn test6_b<T, U>(_: U, _: T) { }
   |             ^^^     ^

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:27:30
   |
LL | fn test6_c<T, K, L, A, B>(_: _, _: (T, K, L, A, B)) { }
   |                              ^ not allowed in type signatures
   |
help: use type parameters instead
   |
LL | fn test6_c<T, K, L, A, B, U>(_: U, _: (T, K, L, A, B)) { }
   |                         ^^^     ^

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:30:13
   |
LL | fn test7(x: _) { let _x: usize = x; }
   |             ^ not allowed in type signatures
   |
help: use type parameters instead
   |
LL | fn test7<T>(x: T) { let _x: usize = x; }
   |         ^^^    ^

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:33:22
   |
LL | fn test8(_f: fn() -> _) { }
   |                      ^ not allowed in type signatures
   |
help: use type parameters instead
   |
LL | fn test8<T>(_f: fn() -> T) { }
   |         ^^^             ^

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:46:26
   |
LL | fn test11(x: &usize) -> &_ {
   |                         -^
   |                         ||
   |                         |not allowed in type signatures
   |                         help: replace with the correct return type: `&&usize`

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:51:52
   |
LL | unsafe fn test12(x: *const usize) -> *const *const _ {
   |                                      --------------^
   |                                      |             |
   |                                      |             not allowed in type signatures
   |                                      help: replace with the correct return type: `*const *const usize`

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:65:8
   |
LL |     a: _,
   |        ^ not allowed in type signatures
LL |
LL |     b: (_, _),
   |         ^  ^ not allowed in type signatures
   |         |
   |         not allowed in type signatures
   |
help: use type parameters instead
   |
LL | struct Test10<T> {
LL |     a: T,
LL |
LL |     b: (T, T),
   |

error: missing type for `static` item
  --> $DIR/typeck_type_placeholder_item.rs:71:12
   |
LL |     static A = 42;
   |            ^ help: provide a type for the item: `A: i32`

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:73:15
   |
LL |     static B: _ = 42;
   |               ^
   |               |
   |               not allowed in type signatures
   |               help: replace `_` with the correct type: `i32`

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:75:15
   |
LL |     static C: Option<_> = Some(42);
   |               ^^^^^^^^^ not allowed in type signatures

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:78:21
   |
LL |     fn fn_test() -> _ { 5 }
   |                     ^
   |                     |
   |                     not allowed in type signatures
   |                     help: replace with the correct return type: `i32`

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:81:23
   |
LL |     fn fn_test2() -> (_, _) { (5, 5) }
   |                      -^--^-
   |                      ||  |
   |                      ||  not allowed in type signatures
   |                      |not allowed in type signatures
   |                      help: replace with the correct return type: `(i32, i32)`

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:84:22
   |
LL |     static FN_TEST3: _ = "test";
   |                      ^
   |                      |
   |                      not allowed in type signatures
   |                      help: replace `_` with the correct type: `&str`

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:87:22
   |
LL |     static FN_TEST4: _ = 145;
   |                      ^
   |                      |
   |                      not allowed in type signatures
   |                      help: replace `_` with the correct type: `i32`

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:90:22
   |
LL |     static FN_TEST5: (_, _) = (1, 2);
   |                      ^^^^^^ not allowed in type signatures

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:93:20
   |
LL |     fn fn_test6(_: _) { }
   |                    ^ not allowed in type signatures
   |
help: use type parameters instead
   |
LL |     fn fn_test6<T>(_: T) { }
   |                ^^^    ^

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:96:20
   |
LL |     fn fn_test7(x: _) { let _x: usize = x; }
   |                    ^ not allowed in type signatures
   |
help: use type parameters instead
   |
LL |     fn fn_test7<T>(x: T) { let _x: usize = x; }
   |                ^^^    ^

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:99:29
   |
LL |     fn fn_test8(_f: fn() -> _) { }
   |                             ^ not allowed in type signatures
   |
help: use type parameters instead
   |
LL |     fn fn_test8<T>(_f: fn() -> T) { }
   |                ^^^             ^

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:121:12
   |
LL |         a: _,
   |            ^ not allowed in type signatures
LL |
LL |         b: (_, _),
   |             ^  ^ not allowed in type signatures
   |             |
   |             not allowed in type signatures
   |
help: use type parameters instead
   |
LL |     struct FnTest10<T> {
LL |         a: T,
LL |
LL |         b: (T, T),
   |

error[E0282]: type annotations needed
  --> $DIR/typeck_type_placeholder_item.rs:126:18
   |
LL |     fn fn_test11(_: _) -> (_, _) { panic!() }
   |                  ^ cannot infer type

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:126:28
   |
LL |     fn fn_test11(_: _) -> (_, _) { panic!() }
   |                            ^  ^ not allowed in type signatures
   |                            |
   |                            not allowed in type signatures

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:130:30
   |
LL |     fn fn_test12(x: i32) -> (_, _) { (x, x) }
   |                             -^--^-
   |                             ||  |
   |                             ||  not allowed in type signatures
   |                             |not allowed in type signatures
   |                             help: replace with the correct return type: `(i32, i32)`

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:133:33
   |
LL |     fn fn_test13(x: _) -> (i32, _) { (x, x) }
   |                           ------^-
   |                           |     |
   |                           |     not allowed in type signatures
   |                           help: replace with the correct return type: `(i32, i32)`

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:152:21
   |
LL | struct BadStruct<_>(_);
   |                     ^ not allowed in type signatures
   |
help: use type parameters instead
   |
LL | struct BadStruct<T>(T);
   |                  ^  ^

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:157:15
   |
LL | impl BadTrait<_> for BadStruct<_> {}
   |               ^                ^ not allowed in type signatures
   |               |
   |               not allowed in type signatures
   |
help: use type parameters instead
   |
LL | impl<T> BadTrait<T> for BadStruct<T> {}
   |     ^^^          ^                ^

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:160:34
   |
LL | fn impl_trait() -> impl BadTrait<_> {
   |                                  ^ not allowed in type signatures

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:165:25
   |
LL | struct BadStruct1<_, _>(_);
   |                         ^ not allowed in type signatures
   |
help: use type parameters instead
   |
LL | struct BadStruct1<T, _>(T);
   |                   ^     ^

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:170:25
   |
LL | struct BadStruct2<_, T>(_, T);
   |                         ^ not allowed in type signatures
   |
help: use type parameters instead
   |
LL | struct BadStruct2<U, T>(U, T);
   |                   ^     ^

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:174:14
   |
LL | type X = Box<_>;
   |              ^ not allowed in type signatures

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:42:27
   |
LL |     fn test10(&self, _x : _) { }
   |                           ^ not allowed in type signatures
   |
help: use type parameters instead
   |
LL |     fn test10<T>(&self, _x : T) { }
   |              ^^^             ^

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:138:31
   |
LL |     fn method_test1(&self, x: _);
   |                               ^ not allowed in type signatures
   |
help: use type parameters instead
   |
LL |     fn method_test1<T>(&self, x: T);
   |                    ^^^           ^

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:140:31
   |
LL |     fn method_test2(&self, x: _) -> _;
   |                               ^     ^ not allowed in type signatures
   |                               |
   |                               not allowed in type signatures
   |
help: use type parameters instead
   |
LL |     fn method_test2<T>(&self, x: T) -> T;
   |                    ^^^           ^     ^

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:142:31
   |
LL |     fn method_test3(&self) -> _;
   |                               ^ not allowed in type signatures
   |
help: use type parameters instead
   |
LL |     fn method_test3<T>(&self) -> T;
   |                    ^^^           ^

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:144:26
   |
LL |     fn assoc_fn_test1(x: _);
   |                          ^ not allowed in type signatures
   |
help: use type parameters instead
   |
LL |     fn assoc_fn_test1<T>(x: T);
   |                      ^^^    ^

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:146:26
   |
LL |     fn assoc_fn_test2(x: _) -> _;
   |                          ^     ^ not allowed in type signatures
   |                          |
   |                          not allowed in type signatures
   |
help: use type parameters instead
   |
LL |     fn assoc_fn_test2<T>(x: T) -> T;
   |                      ^^^    ^     ^

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:148:28
   |
LL |     fn assoc_fn_test3() -> _;
   |                            ^ not allowed in type signatures
   |
help: use type parameters instead
   |
LL |     fn assoc_fn_test3<T>() -> T;
   |                      ^^^      ^

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:60:37
   |
LL |     fn clone_from(&mut self, other: _) { *self = Test9; }
   |                                     ^ not allowed in type signatures
   |
help: use type parameters instead
   |
LL |     fn clone_from<T>(&mut self, other: T) { *self = Test9; }
   |                  ^^^                   ^

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:108:34
   |
LL |         fn fn_test10(&self, _x : _) { }
   |                                  ^ not allowed in type signatures
   |
help: use type parameters instead
   |
LL |         fn fn_test10<T>(&self, _x : T) { }
   |                     ^^^             ^

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:116:41
   |
LL |         fn clone_from(&mut self, other: _) { *self = FnTest9; }
   |                                         ^ not allowed in type signatures
   |
help: use type parameters instead
   |
LL |         fn clone_from<T>(&mut self, other: T) { *self = FnTest9; }
   |                      ^^^                   ^

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:180:21
   |
LL | type Y = impl Trait<_>;
   |                     ^ not allowed in type signatures

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:188:14
   |
LL |     type B = _;
   |              ^ not allowed in type signatures

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:190:14
   |
LL |     const C: _;
   |              ^ not allowed in type signatures

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:192:14
   |
LL |     const D: _ = 42;
   |              ^
   |              |
   |              not allowed in type signatures
   |              help: replace `_` with the correct type: `i32`

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:39:24
   |
LL |     fn test9(&self) -> _ { () }
   |                        ^
   |                        |
   |                        not allowed in type signatures
   |                        help: replace with the correct return type: `()`

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:57:24
   |
LL |     fn clone(&self) -> _ { Test9 }
   |                        ^
   |                        |
   |                        not allowed in type signatures
   |                        help: replace with the correct return type: `Test9`

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:105:31
   |
LL |         fn fn_test9(&self) -> _ { () }
   |                               ^
   |                               |
   |                               not allowed in type signatures
   |                               help: replace with the correct return type: `()`

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:113:28
   |
LL |         fn clone(&self) -> _ { FnTest9 }
   |                            ^
   |                            |
   |                            not allowed in type signatures
   |                            help: replace with the correct return type: `main::FnTest9`

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:197:14
   |
LL |     type A = _;
   |              ^ not allowed in type signatures

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:199:14
   |
LL |     type B = _;
   |              ^ not allowed in type signatures

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:201:14
   |
LL |     const C: _;
   |              ^ not allowed in type signatures

error[E0121]: the type placeholder `_` is not allowed within types on item signatures
  --> $DIR/typeck_type_placeholder_item.rs:204:14
   |
LL |     const D: _ = 42;
   |              ^
   |              |
   |              not allowed in type signatures
   |              help: replace `_` with the correct type: `i32`

error: aborting due to 64 previous errors

Some errors have detailed explanations: E0121, E0282, E0403.
For more information about an error, try `rustc --explain E0121`.
