Rollup merge of #74618 - JohnTitor:no-more-bad-placeholder, r=estebank
Do not ICE on assoc type with bad placeholder Fixes #74612 r? @estebank
This commit is contained in:
commit
9ac2af1dfc
|
@ -730,7 +730,13 @@ fn convert_trait_item(tcx: TyCtxt<'_>, trait_item_id: hir::HirId) {
|
|||
placeholder_type_error(tcx, None, &[], visitor.0, false);
|
||||
}
|
||||
|
||||
hir::TraitItemKind::Type(_, None) => {}
|
||||
hir::TraitItemKind::Type(_, None) => {
|
||||
// #74612: Visit and try to find bad placeholders
|
||||
// even if there is no concrete type.
|
||||
let mut visitor = PlaceholderHirTyCollector::default();
|
||||
visitor.visit_trait_item(trait_item);
|
||||
placeholder_type_error(tcx, None, &[], visitor.0, false);
|
||||
}
|
||||
};
|
||||
|
||||
tcx.ensure().predicates_of(def_id);
|
||||
|
|
|
@ -194,6 +194,8 @@ trait Qux {
|
|||
const D: _ = 42;
|
||||
//~^ ERROR the type placeholder `_` is not allowed within types on item signatures
|
||||
// type E: _; // FIXME: make the parser propagate the existence of `B`
|
||||
type F: std::ops::Fn(_);
|
||||
//~^ ERROR the type placeholder `_` is not allowed within types on item signatures
|
||||
}
|
||||
impl Qux for Struct {
|
||||
type A = _;
|
||||
|
|
|
@ -29,7 +29,7 @@ LL | struct BadStruct2<_, T>(_, T);
|
|||
| ^ expected identifier, found reserved identifier
|
||||
|
||||
error: associated constant in `impl` without body
|
||||
--> $DIR/typeck_type_placeholder_item.rs:203:5
|
||||
--> $DIR/typeck_type_placeholder_item.rs:205:5
|
||||
|
|
||||
LL | const C: _;
|
||||
| ^^^^^^^^^^-
|
||||
|
@ -545,6 +545,12 @@ 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:197:26
|
||||
|
|
||||
LL | type F: std::ops::Fn(_);
|
||||
| ^ not allowed in type signatures
|
||||
|
||||
error[E0121]: the type placeholder `_` is not allowed within types on item signatures
|
||||
--> $DIR/typeck_type_placeholder_item.rs:40:24
|
||||
|
|
||||
|
@ -582,25 +588,25 @@ LL | fn clone(&self) -> _ { FnTest9 }
|
|||
| 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:199:14
|
||||
--> $DIR/typeck_type_placeholder_item.rs:201: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:201:14
|
||||
--> $DIR/typeck_type_placeholder_item.rs:203: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:203:14
|
||||
--> $DIR/typeck_type_placeholder_item.rs:205: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:206:14
|
||||
--> $DIR/typeck_type_placeholder_item.rs:208:14
|
||||
|
|
||||
LL | const D: _ = 42;
|
||||
| ^
|
||||
|
@ -608,7 +614,7 @@ LL | const D: _ = 42;
|
|||
| not allowed in type signatures
|
||||
| help: replace `_` with the correct type: `i32`
|
||||
|
||||
error: aborting due to 66 previous errors
|
||||
error: aborting due to 67 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