use PatKind::error
when an ADT const value has violation
This commit is contained in:
parent
b0fedc07ce
commit
223674a824
@ -198,6 +198,14 @@ fn to_pat(
|
||||
// We errored. Signal that in the pattern, so that follow up errors can be silenced.
|
||||
let kind = PatKind::Error(e);
|
||||
return Box::new(Pat { span: self.span, ty: cv.ty(), kind });
|
||||
} else if let ty::Adt(..) = cv.ty().kind() && matches!(cv, mir::Const::Val(..)) {
|
||||
// This branch is only entered when the current `cv` is `mir::Const::Val`.
|
||||
// This is because `mir::Const::ty` has already been handled by `Self::recur`
|
||||
// and the invalid types may be ignored.
|
||||
let err = TypeNotStructural { span: self.span, non_sm_ty };
|
||||
let e = self.tcx().sess.emit_err(err);
|
||||
let kind = PatKind::Error(e);
|
||||
return Box::new(Pat { span: self.span, ty: cv.ty(), kind });
|
||||
} else if !self.saw_const_match_lint.get() {
|
||||
if let Some(mir_structural_match_violation) = mir_structural_match_violation {
|
||||
match non_sm_ty.kind() {
|
||||
|
7
tests/ui/pattern/issue-115599.rs
Normal file
7
tests/ui/pattern/issue-115599.rs
Normal file
@ -0,0 +1,7 @@
|
||||
const CONST_STRING: String = String::new();
|
||||
|
||||
fn main() {
|
||||
let empty_str = String::from("");
|
||||
if let CONST_STRING = empty_str {}
|
||||
//~^ ERROR to use a constant of type `Vec<u8>` in a pattern, `Vec<u8>` must be annotated with `#[derive(PartialEq, Eq)]`
|
||||
}
|
11
tests/ui/pattern/issue-115599.stderr
Normal file
11
tests/ui/pattern/issue-115599.stderr
Normal file
@ -0,0 +1,11 @@
|
||||
error: to use a constant of type `Vec<u8>` in a pattern, `Vec<u8>` must be annotated with `#[derive(PartialEq, Eq)]`
|
||||
--> $DIR/issue-115599.rs:5:12
|
||||
|
|
||||
LL | if let CONST_STRING = empty_str {}
|
||||
| ^^^^^^^^^^^^
|
||||
|
|
||||
= note: the traits must be derived, manual `impl`s are not sufficient
|
||||
= note: see https://doc.rust-lang.org/stable/std/marker/trait.StructuralEq.html for details
|
||||
|
||||
error: aborting due to previous error
|
||||
|
Loading…
Reference in New Issue
Block a user