Add context to fall-through "const pattern of non-structural type" error
Unify wording with the regular non-structural type error.
This commit is contained in:
parent
335d05aee5
commit
27a1880593
7 changed files with 22 additions and 7 deletions
|
@ -273,7 +273,7 @@ mir_build_non_exhaustive_patterns_type_not_empty = non-exhaustive patterns: type
|
|||
.suggestion = ensure that all possible cases are being handled by adding a match arm with a wildcard pattern as shown
|
||||
.help = ensure that all possible cases are being handled by adding a match arm with a wildcard pattern
|
||||
|
||||
mir_build_non_partial_eq_match = constant of non-structural type `{$non_peq_ty}` in a pattern
|
||||
mir_build_non_partial_eq_match = constant of non-structural type `{$ty}` in a pattern
|
||||
.label = constant of non-structural type
|
||||
|
||||
mir_build_pattern_not_covered = refutable pattern in {$origin}
|
||||
|
@ -322,9 +322,9 @@ mir_build_trailing_irrefutable_let_patterns = trailing irrefutable {$count ->
|
|||
*[other] them
|
||||
} into the body
|
||||
|
||||
mir_build_type_not_structural = constant of non-structural type `{$non_sm_ty}` in a pattern
|
||||
mir_build_type_not_structural = constant of non-structural type `{$ty}` in a pattern
|
||||
.label = constant of non-structural type
|
||||
mir_build_type_not_structural_def = `{$non_sm_ty}` must be annotated with `#[derive(PartialEq)]` to be usable in patterns
|
||||
mir_build_type_not_structural_def = `{$ty}` must be annotated with `#[derive(PartialEq)]` to be usable in patterns
|
||||
mir_build_type_not_structural_more_info = see https://doc.rust-lang.org/stable/std/marker/trait.StructuralPartialEq.html for details
|
||||
mir_build_type_not_structural_tip =
|
||||
the `PartialEq` trait must be derived, manual `impl`s are not sufficient; see https://doc.rust-lang.org/stable/std/marker/trait.StructuralPartialEq.html for details
|
||||
|
|
|
@ -888,7 +888,7 @@ pub(crate) struct TypeNotStructural<'tcx> {
|
|||
pub(crate) span: Span,
|
||||
#[label(mir_build_type_not_structural_def)]
|
||||
pub(crate) ty_def_span: Span,
|
||||
pub(crate) non_sm_ty: Ty<'tcx>,
|
||||
pub(crate) ty: Ty<'tcx>,
|
||||
#[note(mir_build_type_not_structural_tip)]
|
||||
pub(crate) manual_partialeq_impl_span: Option<Span>,
|
||||
#[note(mir_build_type_not_structural_more_info)]
|
||||
|
@ -897,11 +897,13 @@ pub(crate) struct TypeNotStructural<'tcx> {
|
|||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(mir_build_non_partial_eq_match)]
|
||||
#[note(mir_build_type_not_structural_def)]
|
||||
#[note(mir_build_type_not_structural_more_info)]
|
||||
pub(crate) struct TypeNotPartialEq<'tcx> {
|
||||
#[primary_span]
|
||||
#[label]
|
||||
pub(crate) span: Span,
|
||||
pub(crate) non_peq_ty: Ty<'tcx>,
|
||||
pub(crate) ty: Ty<'tcx>,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
|
|
|
@ -190,7 +190,8 @@ impl<'tcx> ConstToPat<'tcx> {
|
|||
if !inlined_const_as_pat.references_error() {
|
||||
// Always check for `PartialEq` if we had no other errors yet.
|
||||
if !self.type_has_partial_eq_impl(ty) {
|
||||
let err = TypeNotPartialEq { span: self.span, non_peq_ty: ty };
|
||||
let err = TypeNotPartialEq { span: self.span, ty };
|
||||
// FIXME: visit every type in `ty` and if it doesn't derive `PartialEq`, mention it.
|
||||
return self.mk_err(self.tcx.dcx().create_err(err), ty);
|
||||
}
|
||||
}
|
||||
|
@ -265,7 +266,7 @@ impl<'tcx> ConstToPat<'tcx> {
|
|||
});
|
||||
let err = TypeNotStructural {
|
||||
span,
|
||||
non_sm_ty: ty,
|
||||
ty,
|
||||
ty_def_span,
|
||||
manual_partialeq_impl_span,
|
||||
manual_partialeq_impl_note: manual_partialeq_impl_span.is_none(),
|
||||
|
|
|
@ -6,6 +6,9 @@ LL | const C: &[O<B>] = &[O::None];
|
|||
...
|
||||
LL | C => (),
|
||||
| ^ constant of non-structural type
|
||||
|
|
||||
= note: `&[O<B>]` must be annotated with `#[derive(PartialEq)]` to be usable in patterns
|
||||
= note: see https://doc.rust-lang.org/stable/std/marker/trait.StructuralPartialEq.html for details
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
|
|
@ -6,6 +6,9 @@ LL | const NO_PARTIAL_EQ_NONE: Option<NoPartialEq> = None;
|
|||
...
|
||||
LL | NO_PARTIAL_EQ_NONE => println!("NO_PARTIAL_EQ_NONE"),
|
||||
| ^^^^^^^^^^^^^^^^^^ constant of non-structural type
|
||||
|
|
||||
= note: `Option<NoPartialEq>` must be annotated with `#[derive(PartialEq)]` to be usable in patterns
|
||||
= note: see https://doc.rust-lang.org/stable/std/marker/trait.StructuralPartialEq.html for details
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
|
|
@ -6,6 +6,9 @@ LL | const CONST_SET: EnumSet<Enum8> = EnumSet { __enumset_underlying: 3 };
|
|||
...
|
||||
LL | CONST_SET => { /* ok */ }
|
||||
| ^^^^^^^^^ constant of non-structural type
|
||||
|
|
||||
= note: `EnumSet<Enum8>` must be annotated with `#[derive(PartialEq)]` to be usable in patterns
|
||||
= note: see https://doc.rust-lang.org/stable/std/marker/trait.StructuralPartialEq.html for details
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
|
|
@ -6,6 +6,9 @@ LL | const A: &[B] = &[];
|
|||
...
|
||||
LL | A => (),
|
||||
| ^ constant of non-structural type
|
||||
|
|
||||
= note: `&[B]` must be annotated with `#[derive(PartialEq)]` to be usable in patterns
|
||||
= note: see https://doc.rust-lang.org/stable/std/marker/trait.StructuralPartialEq.html for details
|
||||
|
||||
error: aborting due to 1 previous error
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue