]> git.lizzy.rs Git - rust.git/commitdiff
Fix false positive "Missing match arm".
authorDawer <7803845+iDawer@users.noreply.github.com>
Fri, 14 May 2021 19:09:17 +0000 (00:09 +0500)
committerDawer <7803845+iDawer@users.noreply.github.com>
Fri, 14 May 2021 19:18:59 +0000 (00:18 +0500)
crates/hir_ty/src/diagnostics/match_check.rs
crates/hir_ty/src/infer/pat.rs
crates/hir_ty/src/tests/patterns.rs

index e9762622f3174488c90bd0c011e4d6d1ed97e721..6ee0529c623e6e77ece717a85028e91564805718 100644 (file)
@@ -1119,6 +1119,7 @@ fn main() {
         (true, false, true) => (),
         (true) => (),
     }
+    match (true, false) { (true,) => {} }
     match (0) { () => () }
     match Unresolved::Bar { Unresolved::Baz => () }
 }
index aea354cdecf80d823f95ed1f141b75181bcd82ea..60b94a64222d367c02cdd8e0a1eec015b361bd46 100644 (file)
@@ -126,11 +126,12 @@ pub(super) fn infer_pat(
                     _ => &[],
                 };
 
-                let (pre, post) = match ellipsis {
-                    Some(idx) => args.split_at(idx),
-                    None => (&args[..], &[][..]),
+                let ((pre, post), n_uncovered_patterns) = match ellipsis {
+                    Some(idx) => {
+                        (args.split_at(idx), expectations.len().saturating_sub(args.len()))
+                    }
+                    None => ((&args[..], &[][..]), 0),
                 };
-                let n_uncovered_patterns = expectations.len().saturating_sub(args.len());
                 let err_ty = self.err_ty();
                 let mut expectations_iter =
                     expectations.iter().map(|a| a.assert_ty_ref(&Interner)).chain(repeat(&err_ty));
index 33305f208f50c510b70fa0cfbf302eee07ba40fd..a0a7b4d0b7daeeb01e522b03ef54b68eb4954c8c 100644 (file)
@@ -732,7 +732,7 @@ fn foo(tuple: (u8, i16, f32)) {
             111..112 'a': u8
             114..115 'b': i16
             124..126 '{}': ()
-            136..142 '(a, b)': (u8, i16, f32)
+            136..142 '(a, b)': (u8, i16)
             137..138 'a': u8
             140..141 'b': i16
             146..161 '{/*too short*/}': ()