parent
3e826bb112
commit
5ad6088827
@ -371,6 +371,11 @@ fn ct_infer(
|
||||
span: Span,
|
||||
) -> &'tcx Const<'tcx> {
|
||||
bad_placeholder_type(self.tcx(), vec![span]).emit();
|
||||
// Typeck doesn't expect erased regions to be returned from `type_of`.
|
||||
let ty = self.tcx.fold_regions(ty, &mut false, |r, _| match r {
|
||||
ty::ReErased => self.tcx.lifetimes.re_static,
|
||||
_ => r,
|
||||
});
|
||||
self.tcx().const_error(ty)
|
||||
}
|
||||
|
||||
@ -1647,6 +1652,12 @@ fn fn_sig(tcx: TyCtxt<'_>, def_id: DefId) -> ty::PolyFnSig<'_> {
|
||||
match get_infer_ret_ty(&sig.decl.output) {
|
||||
Some(ty) => {
|
||||
let fn_sig = tcx.typeck(def_id).liberated_fn_sigs()[hir_id];
|
||||
// Typeck doesn't expect erased regions to be returned from `type_of`.
|
||||
let fn_sig = tcx.fold_regions(fn_sig, &mut false, |r, _| match r {
|
||||
ty::ReErased => tcx.lifetimes.re_static,
|
||||
_ => r,
|
||||
});
|
||||
|
||||
let mut visitor = PlaceholderHirTyCollector::default();
|
||||
visitor.visit_ty(ty);
|
||||
let mut diag = bad_placeholder_type(tcx, visitor.0);
|
||||
@ -1675,6 +1686,7 @@ fn fn_sig(tcx: TyCtxt<'_>, def_id: DefId) -> ty::PolyFnSig<'_> {
|
||||
}
|
||||
}
|
||||
diag.emit();
|
||||
|
||||
ty::Binder::bind(fn_sig)
|
||||
}
|
||||
None => AstConv::ty_of_fn(
|
||||
|
@ -208,3 +208,15 @@ impl Qux for Struct {
|
||||
const D: _ = 42;
|
||||
//~^ ERROR the type placeholder `_` is not allowed within types on item signatures
|
||||
}
|
||||
|
||||
fn map<T>(_: fn() -> Option<&'static T>) -> Option<T> {
|
||||
None
|
||||
}
|
||||
|
||||
fn value() -> Option<&'static _> {
|
||||
//~^ ERROR the type placeholder `_` is not allowed within types on item signatures
|
||||
Option::<&'static u8>::None
|
||||
}
|
||||
|
||||
const _: Option<_> = map(value);
|
||||
//~^ ERROR the type placeholder `_` is not allowed within types on item signatures
|
||||
|
@ -158,7 +158,7 @@ LL | fn test11(x: &usize) -> &_ {
|
||||
| -^
|
||||
| ||
|
||||
| |not allowed in type signatures
|
||||
| help: replace with the correct return type: `&&usize`
|
||||
| help: replace with the correct return type: `&'static &'static usize`
|
||||
|
||||
error[E0121]: the type placeholder `_` is not allowed within types on item signatures
|
||||
--> $DIR/typeck_type_placeholder_item.rs:52:52
|
||||
@ -410,6 +410,24 @@ error[E0121]: the type placeholder `_` is not allowed within types on item signa
|
||||
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:216:31
|
||||
|
|
||||
LL | fn value() -> Option<&'static _> {
|
||||
| ----------------^-
|
||||
| | |
|
||||
| | not allowed in type signatures
|
||||
| help: replace with the correct return type: `Option<&'static u8>`
|
||||
|
||||
error[E0121]: the type placeholder `_` is not allowed within types on item signatures
|
||||
--> $DIR/typeck_type_placeholder_item.rs:221:10
|
||||
|
|
||||
LL | const _: Option<_> = map(value);
|
||||
| ^^^^^^^^^
|
||||
| |
|
||||
| not allowed in type signatures
|
||||
| help: replace `_` with the correct type: `Option<u8>`
|
||||
|
||||
error[E0121]: the type placeholder `_` is not allowed within types on item signatures
|
||||
--> $DIR/typeck_type_placeholder_item.rs:140:31
|
||||
|
|
||||
@ -614,7 +632,7 @@ LL | const D: _ = 42;
|
||||
| not allowed in type signatures
|
||||
| help: replace `_` with the correct type: `i32`
|
||||
|
||||
error: aborting due to 67 previous errors
|
||||
error: aborting due to 69 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0121, E0282, E0403.
|
||||
For more information about an error, try `rustc --explain E0121`.
|
||||
|
Loading…
Reference in New Issue
Block a user