File tree Expand file tree Collapse file tree 3 files changed +36
-0
lines changed
compiler/rustc_mir_build/src/thir/pattern Expand file tree Collapse file tree 3 files changed +36
-0
lines changed Original file line number Diff line number Diff line change @@ -197,6 +197,13 @@ impl<'tcx> ConstToPat<'tcx> {
197197 // All branches above emitted an error. Don't print any more lints.
198198 // The pattern we return is irrelevant since we errored.
199199 return Box :: new ( Pat { span : self . span , ty : cv. ty ( ) , kind : PatKind :: Wild } ) ;
200+ } else if let ty:: Adt ( ..) = cv. ty ( ) . kind ( ) && matches ! ( cv, mir:: Const :: Val ( ..) ) {
201+ // This branch is only entered when the current `cv` is `mir::Const::Val`.
202+ // This is because `mir::Const::ty` has already been handled by `Self::recur`
203+ // and the invalid types may be ignored.
204+ let err = TypeNotStructural { span : self . span , non_sm_ty } ;
205+ self . tcx ( ) . sess . emit_err ( err) ;
206+ return Box :: new ( Pat { span : self . span , ty : cv. ty ( ) , kind : PatKind :: Wild } ) ;
200207 } else if !self . saw_const_match_lint . get ( ) {
201208 if let Some ( mir_structural_match_violation) = mir_structural_match_violation {
202209 match non_sm_ty. kind ( ) {
Original file line number Diff line number Diff line change 1+ const CONST_STRING : String = String :: new ( ) ;
2+
3+ fn main ( ) {
4+ let empty_str = String :: from ( "" ) ;
5+ if let CONST_STRING = empty_str { }
6+ //~^ ERROR to use a constant of type `Vec<u8>` in a pattern, `Vec<u8>` must be annotated with `#[derive(PartialEq, Eq)]`
7+ //~| WARN irrefutable `if let` pattern
8+ }
Original file line number Diff line number Diff line change 1+ error: to use a constant of type `Vec<u8>` in a pattern, `Vec<u8>` must be annotated with `#[derive(PartialEq, Eq)]`
2+ --> $DIR/issue-115599.rs:5:12
3+ |
4+ LL | if let CONST_STRING = empty_str {}
5+ | ^^^^^^^^^^^^
6+ |
7+ = note: the traits must be derived, manual `impl`s are not sufficient
8+ = note: see https://doc.rust-lang.org/stable/std/marker/trait.StructuralEq.html for details
9+
10+ warning: irrefutable `if let` pattern
11+ --> $DIR/issue-115599.rs:5:8
12+ |
13+ LL | if let CONST_STRING = empty_str {}
14+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
15+ |
16+ = note: this pattern will always match, so the `if let` is useless
17+ = help: consider replacing the `if let` with a `let`
18+ = note: `#[warn(irrefutable_let_patterns)]` on by default
19+
20+ error: aborting due to previous error; 1 warning emitted
21+
You can’t perform that action at this time.
0 commit comments