Specify type kind of constant that can't be used in patterns
``` error: trait object `dyn Send` cannot be used in patterns --> $DIR/issue-70972-dyn-trait.rs:6:9 | LL | const F: &'static dyn Send = &7u32; | -------------------------- constant defined here ... LL | F => panic!(), | ^ trait object can't be used in patterns ```
This commit is contained in:
parent
253eb95d45
commit
a6040bc230
9 changed files with 28 additions and 20 deletions
|
@ -152,7 +152,8 @@ mir_build_inline_assembly_requires_unsafe_unsafe_op_in_unsafe_fn_allowed =
|
|||
|
||||
mir_build_interpreted_as_const = introduce a variable instead
|
||||
|
||||
mir_build_invalid_pattern = `{$non_sm_ty}` cannot be used in patterns
|
||||
mir_build_invalid_pattern = {$prefix} `{$non_sm_ty}` cannot be used in patterns
|
||||
.label = {$prefix} can't be used in patterns
|
||||
|
||||
mir_build_irrefutable_let_patterns_if_let = irrefutable `if let` {$count ->
|
||||
[one] pattern
|
||||
|
|
|
@ -903,8 +903,10 @@ pub(crate) struct TypeNotPartialEq<'tcx> {
|
|||
#[diag(mir_build_invalid_pattern)]
|
||||
pub(crate) struct InvalidPattern<'tcx> {
|
||||
#[primary_span]
|
||||
#[label]
|
||||
pub(crate) span: Span,
|
||||
pub(crate) non_sm_ty: Ty<'tcx>,
|
||||
pub(crate) prefix: String,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
|
|
|
@ -171,10 +171,11 @@ impl<'tcx> ConstToPat<'tcx> {
|
|||
ty::FnPtr(..) | ty::RawPtr(..) => {
|
||||
self.tcx.dcx().create_err(PointerPattern { span: self.span })
|
||||
}
|
||||
_ => self
|
||||
.tcx
|
||||
.dcx()
|
||||
.create_err(InvalidPattern { span: self.span, non_sm_ty: bad_ty }),
|
||||
_ => self.tcx.dcx().create_err(InvalidPattern {
|
||||
span: self.span,
|
||||
non_sm_ty: bad_ty,
|
||||
prefix: bad_ty.prefix_string(self.tcx).to_string(),
|
||||
}),
|
||||
};
|
||||
return self.mk_err(e, ty);
|
||||
}
|
||||
|
@ -373,7 +374,11 @@ impl<'tcx> ConstToPat<'tcx> {
|
|||
)
|
||||
}
|
||||
_ => {
|
||||
let err = InvalidPattern { span, non_sm_ty: ty };
|
||||
let err = InvalidPattern {
|
||||
span,
|
||||
non_sm_ty: ty,
|
||||
prefix: ty.prefix_string(self.tcx).to_string(),
|
||||
};
|
||||
return Err(tcx.dcx().create_err(err));
|
||||
}
|
||||
};
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
error: `fn() {uwu}` cannot be used in patterns
|
||||
error: fn item `fn() {uwu}` cannot be used in patterns
|
||||
--> $DIR/pat-match-fndef.rs:8:9
|
||||
|
|
||||
LL | const { uwu } => {}
|
||||
| ^^^^^^^^^^^^^
|
||||
| ^^^^^^^^^^^^^ fn item can't be used in patterns
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
error: `dyn Send` cannot be used in patterns
|
||||
error: trait object `dyn Send` cannot be used in patterns
|
||||
--> $DIR/issue-70972-dyn-trait.rs:6:9
|
||||
|
|
||||
LL | const F: &'static dyn Send = &7u32;
|
||||
| -------------------------- constant defined here
|
||||
...
|
||||
LL | F => panic!(),
|
||||
| ^
|
||||
| ^ trait object can't be used in patterns
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
error: `dyn PartialEq<u32>` cannot be used in patterns
|
||||
error: trait object `dyn PartialEq<u32>` cannot be used in patterns
|
||||
--> $DIR/issue-72565.rs:6:9
|
||||
|
|
||||
LL | const F: &'static dyn PartialEq<u32> = &7u32;
|
||||
| ------------------------------------ constant defined here
|
||||
...
|
||||
LL | F => panic!(),
|
||||
| ^
|
||||
| ^ trait object can't be used in patterns
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
error: `{closure@$DIR/non-structural-match-types.rs:9:17: 9:19}` cannot be used in patterns
|
||||
error: closure `{closure@$DIR/non-structural-match-types.rs:9:17: 9:19}` cannot be used in patterns
|
||||
--> $DIR/non-structural-match-types.rs:9:9
|
||||
|
|
||||
LL | const { || {} } => {}
|
||||
| ^^^^^^^^^^^^^^^
|
||||
| ^^^^^^^^^^^^^^^ closure can't be used in patterns
|
||||
|
||||
error: `{async block@$DIR/non-structural-match-types.rs:12:17: 12:22}` cannot be used in patterns
|
||||
error: `async` block `{async block@$DIR/non-structural-match-types.rs:12:17: 12:22}` cannot be used in patterns
|
||||
--> $DIR/non-structural-match-types.rs:12:9
|
||||
|
|
||||
LL | const { async {} } => {}
|
||||
| ^^^^^^^^^^^^^^^^^^
|
||||
| ^^^^^^^^^^^^^^^^^^ `async` block can't be used in patterns
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
error: `Bar` cannot be used in patterns
|
||||
error: opaque type `Bar` cannot be used in patterns
|
||||
--> $DIR/structural-match-no-leak.rs:16:9
|
||||
|
|
||||
LL | const LEAK_FREE: bar::Bar = bar::leak_free();
|
||||
| ------------------------- constant defined here
|
||||
...
|
||||
LL | LEAK_FREE => (),
|
||||
| ^^^^^^^^^
|
||||
| ^^^^^^^^^ opaque type can't be used in patterns
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
error: `foo::Foo` cannot be used in patterns
|
||||
error: opaque type `foo::Foo` cannot be used in patterns
|
||||
--> $DIR/structural-match.rs:18:9
|
||||
|
|
||||
LL | const VALUE: Foo = value();
|
||||
| ---------------- constant defined here
|
||||
...
|
||||
LL | VALUE => (),
|
||||
| ^^^^^
|
||||
| ^^^^^ opaque type can't be used in patterns
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue