);
}
}
+ (GenericArg::Const(cnst), GenericParamDefKind::Type { .. }) => {
+ let body = tcx.hir().body(cnst.value.body);
+ if let rustc_hir::ExprKind::Path(rustc_hir::QPath::Resolved(_, path)) =
+ body.value.kind
+ {
+ if let Res::Def(DefKind::Fn { .. }, id) = path.res {
+ err.help(&format!(
+ "`{}` is a function item, not a type",
+ tcx.item_name(id)
+ ));
+ err.help("function item types cannot be named directly");
+ }
+ }
+ }
_ => {}
}
--- /dev/null
+fn foo<U>() {}
+
+fn main() {
+ foo::<main>()
+ //~^ ERROR constant provided when a type was expected
+}
--- /dev/null
+error[E0747]: constant provided when a type was expected
+ --> $DIR/generic-function-item-where-type.rs:4:11
+ |
+LL | foo::<main>()
+ | ^^^^
+ |
+ = help: `main` is a function item, not a type
+ = help: function item types cannot be named directly
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0747`.
|
LL | let _x: Box<Bar>;
| ^^^
+ |
+ = help: `Bar` is a function item, not a type
+ = help: function item types cannot be named directly
error: aborting due to 4 previous errors
|
LL | let _x : Box<Bar>;
| ^^^
+ |
+ = help: `Bar` is a function item, not a type
+ = help: function item types cannot be named directly
error[E0747]: constant provided when a type was expected
--> $DIR/privacy-ns2.rs:48:17
|
LL | let _x: Box<Bar>;
| ^^^
+ |
+ = help: `Bar` is a function item, not a type
+ = help: function item types cannot be named directly
error: aborting due to 8 previous errors