about summary refs log tree commit diff
diff options
context:
space:
mode:
authorNoah Lev <camelidcamel@gmail.com>2021-08-25 14:40:06 -0700
committerNoah Lev <camelidcamel@gmail.com>2021-08-25 14:40:06 -0700
commit8a6501d28831d864a3af6adf2e0bd83a773062ed (patch)
tree42571e65520484301d3061ff4e6724d5d08469bc
parent19f45101e72ed6880b0fd1ebee73d74ea782c8c4 (diff)
downloadrust-8a6501d28831d864a3af6adf2e0bd83a773062ed.tar.gz
rust-8a6501d28831d864a3af6adf2e0bd83a773062ed.zip
Adjust spans
* Highlight the whole pattern if it has no fields
* Highlight the whole definition if it has no fields
* Only highlight the pattern name if the pattern is multi-line
* Determine whether a pattern is multi-line based on distance from name
  to last field, rather than first field
-rw-r--r--compiler/rustc_typeck/src/check/pat.rs10
-rw-r--r--src/test/ui/destructuring-assignment/tuple_struct_destructure_fail.stderr8
-rw-r--r--src/test/ui/error-codes/E0023.stderr12
-rw-r--r--src/test/ui/issues/issue-72574-2.stderr2
-rw-r--r--src/test/ui/match/match-pattern-field-mismatch.stderr2
-rw-r--r--src/test/ui/pattern/issue-67037-pat-tup-scrut-ty-diff-less-fields.stderr4
-rw-r--r--src/test/ui/pattern/issue-74539.stderr2
-rw-r--r--src/test/ui/pattern/pat-tuple-field-count-cross.stderr54
-rw-r--r--src/test/ui/pattern/pat-tuple-overfield.rs16
-rw-r--r--src/test/ui/pattern/pat-tuple-overfield.stderr108
-rw-r--r--src/test/ui/pattern/pat-tuple-underfield.rs12
-rw-r--r--src/test/ui/pattern/pat-tuple-underfield.stderr64
-rw-r--r--src/test/ui/pattern/pattern-error-continue.stderr2
13 files changed, 211 insertions, 85 deletions
diff --git a/compiler/rustc_typeck/src/check/pat.rs b/compiler/rustc_typeck/src/check/pat.rs
index 341385731e7..e1f0d3c4363 100644
--- a/compiler/rustc_typeck/src/check/pat.rs
+++ b/compiler/rustc_typeck/src/check/pat.rs
@@ -992,7 +992,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
         let fields_ending = pluralize!(fields.len());
 
         let subpat_spans = if subpats.is_empty() {
-            vec![pat_span.trim_start(qpath.span()).unwrap_or(pat_span)]
+            vec![pat_span]
         } else {
             subpats.iter().map(|p| p.span).collect()
         };
@@ -1000,7 +1000,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
         let res_span = self.tcx.def_span(res.def_id());
         let def_ident_span = self.tcx.def_ident_span(res.def_id()).unwrap_or(res_span);
         let field_def_spans = if fields.is_empty() {
-            vec![res_span.trim_start(def_ident_span).unwrap_or(res_span)]
+            vec![res_span]
         } else {
             fields.iter().map(|f| f.ident.span).collect()
         };
@@ -1021,8 +1021,10 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
             last_subpat_span,
             &format!("expected {} field{}, found {}", fields.len(), fields_ending, subpats.len()),
         );
-        err.span_label(qpath.span(), "");
-        if self.tcx.sess.source_map().is_multiline(def_ident_span.between(field_def_spans[0])) {
+        if self.tcx.sess.source_map().is_multiline(qpath.span().between(last_subpat_span)) {
+            err.span_label(qpath.span(), "");
+        }
+        if self.tcx.sess.source_map().is_multiline(def_ident_span.between(last_field_def_span)) {
             err.span_label(def_ident_span, format!("{} defined here", res.descr()));
         }
         for span in &field_def_spans[..field_def_spans.len() - 1] {
diff --git a/src/test/ui/destructuring-assignment/tuple_struct_destructure_fail.stderr b/src/test/ui/destructuring-assignment/tuple_struct_destructure_fail.stderr
index 9a47ddf0479..9aae4b0a3fa 100644
--- a/src/test/ui/destructuring-assignment/tuple_struct_destructure_fail.stderr
+++ b/src/test/ui/destructuring-assignment/tuple_struct_destructure_fail.stderr
@@ -21,7 +21,7 @@ LL | struct TupleStruct<S, T>(S, T);
    |                          -  - tuple struct has 2 fields
 ...
 LL |     TupleStruct(a, a, b) = TupleStruct(1, 2);
-   |     ----------- ^  ^  ^ expected 2 fields, found 3
+   |                 ^  ^  ^ expected 2 fields, found 3
 
 error[E0023]: this pattern has 1 field, but the corresponding tuple struct has 2 fields
   --> $DIR/tuple_struct_destructure_fail.rs:32:17
@@ -30,7 +30,7 @@ LL | struct TupleStruct<S, T>(S, T);
    |                          -  - tuple struct has 2 fields
 ...
 LL |     TupleStruct(_) = TupleStruct(1, 2);
-   |     ----------- ^ expected 2 fields, found 1
+   |                 ^ expected 2 fields, found 1
    |
 help: use `_` to explicitly ignore each field
    |
@@ -48,7 +48,7 @@ LL |     SingleVariant(S, T)
    |                   -  - tuple variant has 2 fields
 ...
 LL |     Enum::SingleVariant(a, a, b) = Enum::SingleVariant(1, 2);
-   |     ------------------- ^  ^  ^ expected 2 fields, found 3
+   |                         ^  ^  ^ expected 2 fields, found 3
 
 error[E0023]: this pattern has 1 field, but the corresponding tuple variant has 2 fields
   --> $DIR/tuple_struct_destructure_fail.rs:36:25
@@ -57,7 +57,7 @@ LL |     SingleVariant(S, T)
    |                   -  - tuple variant has 2 fields
 ...
 LL |     Enum::SingleVariant(_) = Enum::SingleVariant(1, 2);
-   |     ------------------- ^ expected 2 fields, found 1
+   |                         ^ expected 2 fields, found 1
    |
 help: use `_` to explicitly ignore each field
    |
diff --git a/src/test/ui/error-codes/E0023.stderr b/src/test/ui/error-codes/E0023.stderr
index 85e1b2cb4ce..3e321b037b2 100644
--- a/src/test/ui/error-codes/E0023.stderr
+++ b/src/test/ui/error-codes/E0023.stderr
@@ -5,7 +5,7 @@ LL |     Apple(String, String),
    |           ------  ------ tuple variant has 2 fields
 ...
 LL |         Fruit::Apple(a) => {},
-   |         ------------ ^ expected 2 fields, found 1
+   |                      ^ expected 2 fields, found 1
    |
 help: use `_` to explicitly ignore each field
    |
@@ -19,7 +19,7 @@ LL |     Apple(String, String),
    |           ------  ------ tuple variant has 2 fields
 ...
 LL |         Fruit::Apple(a, b, c) => {},
-   |         ------------ ^  ^  ^ expected 2 fields, found 3
+   |                      ^  ^  ^ expected 2 fields, found 3
 
 error[E0023]: this pattern has 2 fields, but the corresponding tuple variant has 1 field
   --> $DIR/E0023.rs:13:21
@@ -28,7 +28,7 @@ LL |     Pear(u32),
    |          --- tuple variant has 1 field
 ...
 LL |         Fruit::Pear(1, 2) => {},
-   |         ----------- ^  ^ expected 1 field, found 2
+   |                     ^  ^ expected 1 field, found 2
 
 error[E0023]: this pattern has 2 fields, but the corresponding tuple variant has 1 field
   --> $DIR/E0023.rs:14:23
@@ -37,7 +37,7 @@ LL |     Orange((String, String)),
    |            ---------------- tuple variant has 1 field
 ...
 LL |         Fruit::Orange(a, b) => {},
-   |         ------------- ^  ^ expected 1 field, found 2
+   |                       ^  ^ expected 1 field, found 2
    |
 help: missing parentheses
    |
@@ -45,13 +45,13 @@ LL |         Fruit::Orange((a, b)) => {},
    |                       +    +
 
 error[E0023]: this pattern has 0 fields, but the corresponding tuple variant has 1 field
-  --> $DIR/E0023.rs:15:22
+  --> $DIR/E0023.rs:15:9
    |
 LL |     Banana(()),
    |            -- tuple variant has 1 field
 ...
 LL |         Fruit::Banana() => {},
-   |         -------------^^ expected 1 field, found 0
+   |         ^^^^^^^^^^^^^^^ expected 1 field, found 0
    |
 help: missing parentheses
    |
diff --git a/src/test/ui/issues/issue-72574-2.stderr b/src/test/ui/issues/issue-72574-2.stderr
index 3f8ff4f0bac..05650f05cbf 100644
--- a/src/test/ui/issues/issue-72574-2.stderr
+++ b/src/test/ui/issues/issue-72574-2.stderr
@@ -25,7 +25,7 @@ LL | struct Binder(i32, i32, i32);
    |               ---  ---  --- tuple struct has 3 fields
 ...
 LL |         Binder(_a, _x @ ..) => {}
-   |         ------ ^^  ^^^^^^^ expected 3 fields, found 2
+   |                ^^  ^^^^^^^ expected 3 fields, found 2
    |
 help: use `_` to explicitly ignore each field
    |
diff --git a/src/test/ui/match/match-pattern-field-mismatch.stderr b/src/test/ui/match/match-pattern-field-mismatch.stderr
index 01d7cf0d054..c994ee4f6d4 100644
--- a/src/test/ui/match/match-pattern-field-mismatch.stderr
+++ b/src/test/ui/match/match-pattern-field-mismatch.stderr
@@ -5,7 +5,7 @@ LL |         Rgb(usize, usize, usize),
    |             -----  -----  ----- tuple variant has 3 fields
 ...
 LL |           Color::Rgb(_, _) => { }
-   |           ---------- ^  ^ expected 3 fields, found 2
+   |                      ^  ^ expected 3 fields, found 2
    |
 help: use `_` to explicitly ignore each field
    |
diff --git a/src/test/ui/pattern/issue-67037-pat-tup-scrut-ty-diff-less-fields.stderr b/src/test/ui/pattern/issue-67037-pat-tup-scrut-ty-diff-less-fields.stderr
index c87b70625b4..75a231f6b4b 100644
--- a/src/test/ui/pattern/issue-67037-pat-tup-scrut-ty-diff-less-fields.stderr
+++ b/src/test/ui/pattern/issue-67037-pat-tup-scrut-ty-diff-less-fields.stderr
@@ -10,13 +10,13 @@ LL |     let P() = U {};
               found struct `P<_>`
 
 error[E0023]: this pattern has 0 fields, but the corresponding tuple struct has 1 field
-  --> $DIR/issue-67037-pat-tup-scrut-ty-diff-less-fields.rs:19:10
+  --> $DIR/issue-67037-pat-tup-scrut-ty-diff-less-fields.rs:19:9
    |
 LL | struct P<T>(T); // 1 type parameter wanted
    |             - tuple struct has 1 field
 ...
 LL |     let P() = U {};
-   |         -^^ expected 1 field, found 0
+   |         ^^^ expected 1 field, found 0
    |
 help: use `_` to explicitly ignore each field
    |
diff --git a/src/test/ui/pattern/issue-74539.stderr b/src/test/ui/pattern/issue-74539.stderr
index d7cbcf2cfa1..7443946c013 100644
--- a/src/test/ui/pattern/issue-74539.stderr
+++ b/src/test/ui/pattern/issue-74539.stderr
@@ -25,7 +25,7 @@ LL |     A(u8, u8),
    |       --  -- tuple variant has 2 fields
 ...
 LL |         E::A(x @ ..) => {
-   |         ---- ^^^^^^ expected 2 fields, found 1
+   |              ^^^^^^ expected 2 fields, found 1
    |
 help: use `_` to explicitly ignore each field
    |
diff --git a/src/test/ui/pattern/pat-tuple-field-count-cross.stderr b/src/test/ui/pattern/pat-tuple-field-count-cross.stderr
index 570bf0cbc08..cab8d4759df 100644
--- a/src/test/ui/pattern/pat-tuple-field-count-cross.stderr
+++ b/src/test/ui/pattern/pat-tuple-field-count-cross.stderr
@@ -121,7 +121,7 @@ error[E0023]: this pattern has 1 field, but the corresponding tuple struct has 0
   --> $DIR/pat-tuple-field-count-cross.rs:14:12
    |
 LL |         Z1(x) => {}
-   |         -- ^ expected 0 fields, found 1
+   |            ^ expected 0 fields, found 1
    |
   ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:2:1
    |
@@ -129,10 +129,10 @@ LL | pub struct Z1();
    | ---------------- tuple struct has 0 fields
 
 error[E0023]: this pattern has 0 fields, but the corresponding tuple struct has 3 fields
-  --> $DIR/pat-tuple-field-count-cross.rs:18:10
+  --> $DIR/pat-tuple-field-count-cross.rs:18:9
    |
 LL |         S() => {}
-   |         -^^ expected 3 fields, found 0
+   |         ^^^ expected 3 fields, found 0
    |
   ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:4:14
    |
@@ -152,7 +152,7 @@ error[E0023]: this pattern has 1 field, but the corresponding tuple struct has 3
   --> $DIR/pat-tuple-field-count-cross.rs:19:11
    |
 LL |         S(1) => {}
-   |         - ^ expected 3 fields, found 1
+   |           ^ expected 3 fields, found 1
    |
   ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:4:14
    |
@@ -172,7 +172,7 @@ error[E0023]: this pattern has 2 fields, but the corresponding tuple struct has
   --> $DIR/pat-tuple-field-count-cross.rs:20:11
    |
 LL |         S(xyz, abc) => {}
-   |         - ^^^  ^^^ expected 3 fields, found 2
+   |           ^^^  ^^^ expected 3 fields, found 2
    |
   ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:4:14
    |
@@ -188,7 +188,7 @@ error[E0023]: this pattern has 4 fields, but the corresponding tuple struct has
   --> $DIR/pat-tuple-field-count-cross.rs:21:11
    |
 LL |         S(1, 2, 3, 4) => {}
-   |         - ^  ^  ^  ^ expected 3 fields, found 4
+   |           ^  ^  ^  ^ expected 3 fields, found 4
    |
   ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:4:14
    |
@@ -196,10 +196,10 @@ LL | pub struct S(pub u8, pub u8, pub u8);
    |              ------  ------  ------ tuple struct has 3 fields
 
 error[E0023]: this pattern has 0 fields, but the corresponding tuple struct has 3 fields
-  --> $DIR/pat-tuple-field-count-cross.rs:24:10
+  --> $DIR/pat-tuple-field-count-cross.rs:24:9
    |
 LL |           M() => {}
-   |           -^^ expected 3 fields, found 0
+   |           ^^^ expected 3 fields, found 0
    |
   ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:5:1
    |
@@ -226,7 +226,7 @@ error[E0023]: this pattern has 1 field, but the corresponding tuple struct has 3
   --> $DIR/pat-tuple-field-count-cross.rs:25:11
    |
 LL |           M(1) => {}
-   |           - ^ expected 3 fields, found 1
+   |             ^ expected 3 fields, found 1
    |
   ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:5:1
    |
@@ -253,7 +253,7 @@ error[E0023]: this pattern has 2 fields, but the corresponding tuple struct has
   --> $DIR/pat-tuple-field-count-cross.rs:26:11
    |
 LL |           M(xyz, abc) => {}
-   |           - ^^^  ^^^ expected 3 fields, found 2
+   |             ^^^  ^^^ expected 3 fields, found 2
    |
   ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:5:1
    |
@@ -276,7 +276,7 @@ error[E0023]: this pattern has 4 fields, but the corresponding tuple struct has
   --> $DIR/pat-tuple-field-count-cross.rs:27:11
    |
 LL |           M(1, 2, 3, 4) => {}
-   |           - ^  ^  ^  ^ expected 3 fields, found 4
+   |             ^  ^  ^  ^ expected 3 fields, found 4
    |
   ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:5:1
    |
@@ -294,7 +294,7 @@ error[E0023]: this pattern has 1 field, but the corresponding tuple variant has
   --> $DIR/pat-tuple-field-count-cross.rs:36:16
    |
 LL |         E1::Z1(x) => {}
-   |         ------ ^ expected 0 fields, found 1
+   |                ^ expected 0 fields, found 1
    |
   ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:11:19
    |
@@ -302,10 +302,10 @@ LL | pub enum E1 { Z0, Z1(), S(u8, u8, u8) }
    |                   ---- tuple variant has 0 fields
 
 error[E0023]: this pattern has 0 fields, but the corresponding tuple variant has 3 fields
-  --> $DIR/pat-tuple-field-count-cross.rs:39:14
+  --> $DIR/pat-tuple-field-count-cross.rs:39:9
    |
 LL |         E1::S() => {}
-   |         -----^^ expected 3 fields, found 0
+   |         ^^^^^^^ expected 3 fields, found 0
    |
   ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:11:27
    |
@@ -325,7 +325,7 @@ error[E0023]: this pattern has 1 field, but the corresponding tuple variant has
   --> $DIR/pat-tuple-field-count-cross.rs:40:15
    |
 LL |         E1::S(1) => {}
-   |         ----- ^ expected 3 fields, found 1
+   |               ^ expected 3 fields, found 1
    |
   ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:11:27
    |
@@ -345,7 +345,7 @@ error[E0023]: this pattern has 2 fields, but the corresponding tuple variant has
   --> $DIR/pat-tuple-field-count-cross.rs:41:15
    |
 LL |         E1::S(xyz, abc) => {}
-   |         ----- ^^^  ^^^ expected 3 fields, found 2
+   |               ^^^  ^^^ expected 3 fields, found 2
    |
   ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:11:27
    |
@@ -361,7 +361,7 @@ error[E0023]: this pattern has 4 fields, but the corresponding tuple variant has
   --> $DIR/pat-tuple-field-count-cross.rs:42:15
    |
 LL |         E1::S(1, 2, 3, 4) => {}
-   |         ----- ^  ^  ^  ^ expected 3 fields, found 4
+   |               ^  ^  ^  ^ expected 3 fields, found 4
    |
   ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:11:27
    |
@@ -369,10 +369,10 @@ LL | pub enum E1 { Z0, Z1(), S(u8, u8, u8) }
    |                           --  --  -- tuple variant has 3 fields
 
 error[E0023]: this pattern has 0 fields, but the corresponding tuple variant has 3 fields
-  --> $DIR/pat-tuple-field-count-cross.rs:46:14
+  --> $DIR/pat-tuple-field-count-cross.rs:46:9
    |
 LL |         E2::S() => {}
-   |         -----^^ expected 3 fields, found 0
+   |         ^^^^^^^ expected 3 fields, found 0
    |
   ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:14:7
    |
@@ -392,7 +392,7 @@ error[E0023]: this pattern has 1 field, but the corresponding tuple variant has
   --> $DIR/pat-tuple-field-count-cross.rs:47:15
    |
 LL |         E2::S(1) => {}
-   |         ----- ^ expected 3 fields, found 1
+   |               ^ expected 3 fields, found 1
    |
   ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:14:7
    |
@@ -412,7 +412,7 @@ error[E0023]: this pattern has 2 fields, but the corresponding tuple variant has
   --> $DIR/pat-tuple-field-count-cross.rs:48:15
    |
 LL |         E2::S(xyz, abc) => {}
-   |         ----- ^^^  ^^^ expected 3 fields, found 2
+   |               ^^^  ^^^ expected 3 fields, found 2
    |
   ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:14:7
    |
@@ -428,7 +428,7 @@ error[E0023]: this pattern has 4 fields, but the corresponding tuple variant has
   --> $DIR/pat-tuple-field-count-cross.rs:49:15
    |
 LL |         E2::S(1, 2, 3, 4) => {}
-   |         ----- ^  ^  ^  ^ expected 3 fields, found 4
+   |               ^  ^  ^  ^ expected 3 fields, found 4
    |
   ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:14:7
    |
@@ -436,10 +436,10 @@ LL |     S(u8, u8, u8),
    |       --  --  -- tuple variant has 3 fields
 
 error[E0023]: this pattern has 0 fields, but the corresponding tuple variant has 3 fields
-  --> $DIR/pat-tuple-field-count-cross.rs:52:14
+  --> $DIR/pat-tuple-field-count-cross.rs:52:9
    |
 LL |           E2::M() => {}
-   |           -----^^ expected 3 fields, found 0
+   |           ^^^^^^^ expected 3 fields, found 0
    |
   ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:15:5
    |
@@ -466,7 +466,7 @@ error[E0023]: this pattern has 1 field, but the corresponding tuple variant has
   --> $DIR/pat-tuple-field-count-cross.rs:53:15
    |
 LL |           E2::M(1) => {}
-   |           ----- ^ expected 3 fields, found 1
+   |                 ^ expected 3 fields, found 1
    |
   ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:15:5
    |
@@ -493,7 +493,7 @@ error[E0023]: this pattern has 2 fields, but the corresponding tuple variant has
   --> $DIR/pat-tuple-field-count-cross.rs:54:15
    |
 LL |           E2::M(xyz, abc) => {}
-   |           ----- ^^^  ^^^ expected 3 fields, found 2
+   |                 ^^^  ^^^ expected 3 fields, found 2
    |
   ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:15:5
    |
@@ -516,7 +516,7 @@ error[E0023]: this pattern has 4 fields, but the corresponding tuple variant has
   --> $DIR/pat-tuple-field-count-cross.rs:55:15
    |
 LL |           E2::M(1, 2, 3, 4) => {}
-   |           ----- ^  ^  ^  ^ expected 3 fields, found 4
+   |                 ^  ^  ^  ^ expected 3 fields, found 4
    |
   ::: $DIR/auxiliary/declarations-for-tuple-field-count-errors.rs:15:5
    |
diff --git a/src/test/ui/pattern/pat-tuple-overfield.rs b/src/test/ui/pattern/pat-tuple-overfield.rs
index dd0548a088c..c863c657514 100644
--- a/src/test/ui/pattern/pat-tuple-overfield.rs
+++ b/src/test/ui/pattern/pat-tuple-overfield.rs
@@ -30,6 +30,22 @@ fn main() {
     match M(1, 2, 3, 4, 5) {
         M(1, 2, 3, 4, 5, 6) => {}
         //~^ ERROR this pattern has 6 fields, but the corresponding tuple struct has 5 fields
+        M(1,
+          2,
+          3,
+          4,
+          5,
+          6) => {}
+        //~^ ERROR this pattern has 6 fields, but the corresponding tuple struct has 5 fields
+        M(
+            1,
+            2,
+            3,
+            4,
+            5,
+            6,
+        ) => {}
+        //~^^ ERROR this pattern has 6 fields, but the corresponding tuple struct has 5 fields
     }
     match Z0 {
         Z0 => {}
diff --git a/src/test/ui/pattern/pat-tuple-overfield.stderr b/src/test/ui/pattern/pat-tuple-overfield.stderr
index 646ac4e6618..1c44f7e5f6f 100644
--- a/src/test/ui/pattern/pat-tuple-overfield.stderr
+++ b/src/test/ui/pattern/pat-tuple-overfield.stderr
@@ -1,5 +1,5 @@
 error[E0530]: match bindings cannot shadow tuple structs
-  --> $DIR/pat-tuple-overfield.rs:41:9
+  --> $DIR/pat-tuple-overfield.rs:57:9
    |
 LL | struct Z1();
    | ------------ the tuple struct `Z1` is defined here
@@ -8,7 +8,7 @@ LL |         Z1 => {}
    |         ^^ cannot be named the same as a tuple struct
 
 error[E0532]: expected tuple struct or tuple variant, found unit struct `Z0`
-  --> $DIR/pat-tuple-overfield.rs:36:9
+  --> $DIR/pat-tuple-overfield.rs:52:9
    |
 LL | struct Z0;
    | ---------- `Z0` defined here
@@ -28,7 +28,7 @@ LL |         Z1() => {}
    |         ~~
 
 error[E0532]: expected tuple struct or tuple variant, found unit struct `Z0`
-  --> $DIR/pat-tuple-overfield.rs:37:9
+  --> $DIR/pat-tuple-overfield.rs:53:9
    |
 LL | struct Z0;
    | ---------- `Z0` defined here
@@ -48,7 +48,7 @@ LL |         Z1(_) => {}
    |         ~~
 
 error[E0532]: expected tuple struct or tuple variant, found unit struct `Z0`
-  --> $DIR/pat-tuple-overfield.rs:38:9
+  --> $DIR/pat-tuple-overfield.rs:54:9
    |
 LL | struct Z0;
    | ---------- `Z0` defined here
@@ -68,7 +68,7 @@ LL |         Z1(_, _) => {}
    |         ~~
 
 error[E0532]: expected tuple struct or tuple variant, found unit variant `E1::Z0`
-  --> $DIR/pat-tuple-overfield.rs:48:9
+  --> $DIR/pat-tuple-overfield.rs:64:9
    |
 LL |     Z0,
    |     -- `E1::Z0` defined here
@@ -88,7 +88,7 @@ LL |         E1::Z1() => {}
    |             ~~
 
 error[E0532]: expected tuple struct or tuple variant, found unit variant `E1::Z0`
-  --> $DIR/pat-tuple-overfield.rs:49:9
+  --> $DIR/pat-tuple-overfield.rs:65:9
    |
 LL |     Z0,
    |     -- `E1::Z0` defined here
@@ -108,7 +108,7 @@ LL |         E1::Z1(_) => {}
    |             ~~
 
 error[E0532]: expected tuple struct or tuple variant, found unit variant `E1::Z0`
-  --> $DIR/pat-tuple-overfield.rs:50:9
+  --> $DIR/pat-tuple-overfield.rs:66:9
    |
 LL |     Z0,
    |     -- `E1::Z0` defined here
@@ -128,7 +128,7 @@ LL |         E1::Z1(_, _) => {}
    |             ~~
 
 error[E0532]: expected unit struct, unit variant or constant, found tuple variant `E1::Z1`
-  --> $DIR/pat-tuple-overfield.rs:53:9
+  --> $DIR/pat-tuple-overfield.rs:69:9
    |
 LL |     Z0,
    |     -- similarly named unit variant `Z0` defined here
@@ -177,7 +177,7 @@ LL | struct S(u8, u8, u8);
    |          --  --  -- tuple struct has 3 fields
 ...
 LL |         S(1, 2, 3, 4) => {}
-   |         - ^  ^  ^  ^ expected 3 fields, found 4
+   |           ^  ^  ^  ^ expected 3 fields, found 4
 
 error[E0023]: this pattern has 4 fields, but the corresponding tuple struct has 3 fields
   --> $DIR/pat-tuple-overfield.rs:26:11
@@ -186,7 +186,7 @@ LL | struct S(u8, u8, u8);
    |          --  --  -- tuple struct has 3 fields
 ...
 LL |         S(1, 2, .., 3, 4) => {}
-   |         - ^  ^      ^  ^ expected 3 fields, found 4
+   |           ^  ^      ^  ^ expected 3 fields, found 4
 
 error[E0023]: this pattern has 6 fields, but the corresponding tuple struct has 5 fields
   --> $DIR/pat-tuple-overfield.rs:31:11
@@ -205,45 +205,105 @@ LL |     u8,
    |     -- tuple struct has 5 fields
 ...
 LL |         M(1, 2, 3, 4, 5, 6) => {}
-   |         - ^  ^  ^  ^  ^  ^ expected 5 fields, found 6
+   |           ^  ^  ^  ^  ^  ^ expected 5 fields, found 6
+
+error[E0023]: this pattern has 6 fields, but the corresponding tuple struct has 5 fields
+  --> $DIR/pat-tuple-overfield.rs:33:11
+   |
+LL | struct M(
+   |        - tuple struct defined here
+LL |     u8,
+   |     --
+LL |     u8,
+   |     --
+LL |     u8,
+   |     --
+LL |     u8,
+   |     --
+LL |     u8,
+   |     -- tuple struct has 5 fields
+...
+LL |         M(1,
+   |         - ^
+LL |           2,
+   |           ^
+LL |           3,
+   |           ^
+LL |           4,
+   |           ^
+LL |           5,
+   |           ^
+LL |           6) => {}
+   |           ^ expected 5 fields, found 6
+
+error[E0023]: this pattern has 6 fields, but the corresponding tuple struct has 5 fields
+  --> $DIR/pat-tuple-overfield.rs:41:13
+   |
+LL | struct M(
+   |        - tuple struct defined here
+LL |     u8,
+   |     --
+LL |     u8,
+   |     --
+LL |     u8,
+   |     --
+LL |     u8,
+   |     --
+LL |     u8,
+   |     -- tuple struct has 5 fields
+...
+LL |         M(
+   |         -
+LL |             1,
+   |             ^
+LL |             2,
+   |             ^
+LL |             3,
+   |             ^
+LL |             4,
+   |             ^
+LL |             5,
+   |             ^
+LL |             6,
+   |             ^ expected 5 fields, found 6
 
 error[E0023]: this pattern has 1 field, but the corresponding tuple struct has 0 fields
-  --> $DIR/pat-tuple-overfield.rs:43:12
+  --> $DIR/pat-tuple-overfield.rs:59:12
    |
 LL | struct Z1();
-   |          --- tuple struct has 0 fields
+   | ------------ tuple struct has 0 fields
 ...
 LL |         Z1(_) => {}
-   |         -- ^ expected 0 fields, found 1
+   |            ^ expected 0 fields, found 1
 
 error[E0023]: this pattern has 2 fields, but the corresponding tuple struct has 0 fields
-  --> $DIR/pat-tuple-overfield.rs:44:12
+  --> $DIR/pat-tuple-overfield.rs:60:12
    |
 LL | struct Z1();
-   |          --- tuple struct has 0 fields
+   | ------------ tuple struct has 0 fields
 ...
 LL |         Z1(_, _) => {}
-   |         -- ^  ^ expected 0 fields, found 2
+   |            ^  ^ expected 0 fields, found 2
 
 error[E0023]: this pattern has 1 field, but the corresponding tuple variant has 0 fields
-  --> $DIR/pat-tuple-overfield.rs:55:16
+  --> $DIR/pat-tuple-overfield.rs:71:16
    |
 LL |     Z1(),
-   |       -- tuple variant has 0 fields
+   |     ---- tuple variant has 0 fields
 ...
 LL |         E1::Z1(_) => {}
-   |         ------ ^ expected 0 fields, found 1
+   |                ^ expected 0 fields, found 1
 
 error[E0023]: this pattern has 2 fields, but the corresponding tuple variant has 0 fields
-  --> $DIR/pat-tuple-overfield.rs:56:16
+  --> $DIR/pat-tuple-overfield.rs:72:16
    |
 LL |     Z1(),
-   |       -- tuple variant has 0 fields
+   |     ---- tuple variant has 0 fields
 ...
 LL |         E1::Z1(_, _) => {}
-   |         ------ ^  ^ expected 0 fields, found 2
+   |                ^  ^ expected 0 fields, found 2
 
-error: aborting due to 17 previous errors
+error: aborting due to 19 previous errors
 
 Some errors have detailed explanations: E0023, E0308, E0530, E0532.
 For more information about an error, try `rustc --explain E0023`.
diff --git a/src/test/ui/pattern/pat-tuple-underfield.rs b/src/test/ui/pattern/pat-tuple-underfield.rs
index ed852a47bb4..dac60e3fab2 100644
--- a/src/test/ui/pattern/pat-tuple-underfield.rs
+++ b/src/test/ui/pattern/pat-tuple-underfield.rs
@@ -21,6 +21,12 @@ fn main() {
         //~^ ERROR this pattern has 0 fields, but the corresponding tuple struct has 2 fields
         //~| HELP use `_` to explicitly ignore each field
         //~| HELP use `..` to ignore all fields
+
+        // Test non-standard formatting
+        S () => {}
+        //~^ ERROR this pattern has 0 fields, but the corresponding tuple struct has 2 fields
+        //~| HELP use `_` to explicitly ignore each field
+        //~| HELP use `..` to ignore all fields
     }
 
     match E::S(0, 1.0) {
@@ -39,6 +45,12 @@ fn main() {
         //~^ ERROR this pattern has 0 fields, but the corresponding tuple variant has 2 fields
         //~| HELP use `_` to explicitly ignore each field
         //~| HELP use `..` to ignore all fields
+
+        // Test non-standard formatting
+        E::S () => {}
+        //~^ ERROR this pattern has 0 fields, but the corresponding tuple variant has 2 fields
+        //~| HELP use `_` to explicitly ignore each field
+        //~| HELP use `..` to ignore all fields
     }
     match E::S(0, 1.0) {
         E::S => {}
diff --git a/src/test/ui/pattern/pat-tuple-underfield.stderr b/src/test/ui/pattern/pat-tuple-underfield.stderr
index 4c21ad0be3e..e75f9b38da5 100644
--- a/src/test/ui/pattern/pat-tuple-underfield.stderr
+++ b/src/test/ui/pattern/pat-tuple-underfield.stderr
@@ -1,5 +1,5 @@
 error[E0532]: expected unit struct, unit variant or constant, found tuple variant `E::S`
-  --> $DIR/pat-tuple-underfield.rs:44:9
+  --> $DIR/pat-tuple-underfield.rs:56:9
    |
 LL |     S(i32, f32),
    |     ----------- `E::S` defined here
@@ -14,7 +14,7 @@ LL | struct S(i32, f32);
    |          ---  --- tuple struct has 2 fields
 ...
 LL |         S(x) => {}
-   |         - ^ expected 2 fields, found 1
+   |           ^ expected 2 fields, found 1
    |
 help: use `_` to explicitly ignore each field
    |
@@ -28,7 +28,7 @@ LL | struct S(i32, f32);
    |          ---  --- tuple struct has 2 fields
 ...
 LL |         S(_) => {}
-   |         - ^ expected 2 fields, found 1
+   |           ^ expected 2 fields, found 1
    |
 help: use `_` to explicitly ignore each field
    |
@@ -40,13 +40,13 @@ LL |         S(..) => {}
    |           ~~
 
 error[E0023]: this pattern has 0 fields, but the corresponding tuple struct has 2 fields
-  --> $DIR/pat-tuple-underfield.rs:20:10
+  --> $DIR/pat-tuple-underfield.rs:20:9
    |
 LL | struct S(i32, f32);
    |          ---  --- tuple struct has 2 fields
 ...
 LL |         S() => {}
-   |         -^^ expected 2 fields, found 0
+   |         ^^^ expected 2 fields, found 0
    |
 help: use `_` to explicitly ignore each field
    |
@@ -57,14 +57,32 @@ help: use `..` to ignore all fields
 LL |         S(..) => {}
    |           ++
 
+error[E0023]: this pattern has 0 fields, but the corresponding tuple struct has 2 fields
+  --> $DIR/pat-tuple-underfield.rs:26:9
+   |
+LL | struct S(i32, f32);
+   |          ---  --- tuple struct has 2 fields
+...
+LL |         S () => {}
+   |         ^^^^ expected 2 fields, found 0
+   |
+help: use `_` to explicitly ignore each field
+   |
+LL |         S (_, _) => {}
+   |            ++++
+help: use `..` to ignore all fields
+   |
+LL |         S (..) => {}
+   |            ++
+
 error[E0023]: this pattern has 1 field, but the corresponding tuple variant has 2 fields
-  --> $DIR/pat-tuple-underfield.rs:27:14
+  --> $DIR/pat-tuple-underfield.rs:33:14
    |
 LL |     S(i32, f32),
    |       ---  --- tuple variant has 2 fields
 ...
 LL |         E::S(x) => {}
-   |         ---- ^ expected 2 fields, found 1
+   |              ^ expected 2 fields, found 1
    |
 help: use `_` to explicitly ignore each field
    |
@@ -72,13 +90,13 @@ LL |         E::S(x, _) => {}
    |               +++
 
 error[E0023]: this pattern has 1 field, but the corresponding tuple variant has 2 fields
-  --> $DIR/pat-tuple-underfield.rs:32:14
+  --> $DIR/pat-tuple-underfield.rs:38:14
    |
 LL |     S(i32, f32),
    |       ---  --- tuple variant has 2 fields
 ...
 LL |         E::S(_) => {}
-   |         ---- ^ expected 2 fields, found 1
+   |              ^ expected 2 fields, found 1
    |
 help: use `_` to explicitly ignore each field
    |
@@ -90,13 +108,13 @@ LL |         E::S(..) => {}
    |              ~~
 
 error[E0023]: this pattern has 0 fields, but the corresponding tuple variant has 2 fields
-  --> $DIR/pat-tuple-underfield.rs:38:13
+  --> $DIR/pat-tuple-underfield.rs:44:9
    |
 LL |     S(i32, f32),
    |       ---  --- tuple variant has 2 fields
 ...
 LL |         E::S() => {}
-   |         ----^^ expected 2 fields, found 0
+   |         ^^^^^^ expected 2 fields, found 0
    |
 help: use `_` to explicitly ignore each field
    |
@@ -107,14 +125,32 @@ help: use `..` to ignore all fields
 LL |         E::S(..) => {}
    |              ++
 
+error[E0023]: this pattern has 0 fields, but the corresponding tuple variant has 2 fields
+  --> $DIR/pat-tuple-underfield.rs:50:9
+   |
+LL |     S(i32, f32),
+   |       ---  --- tuple variant has 2 fields
+...
+LL |         E::S () => {}
+   |         ^^^^^^^ expected 2 fields, found 0
+   |
+help: use `_` to explicitly ignore each field
+   |
+LL |         E::S (_, _) => {}
+   |               ++++
+help: use `..` to ignore all fields
+   |
+LL |         E::S (..) => {}
+   |               ++
+
 error[E0023]: this pattern has 2 fields, but the corresponding tuple struct has 4 fields
-  --> $DIR/pat-tuple-underfield.rs:50:19
+  --> $DIR/pat-tuple-underfield.rs:62:19
    |
 LL | struct Point4(i32, i32, i32, i32);
    |               ---  ---  ---  --- tuple struct has 4 fields
 ...
 LL |         Point4(   a   ,     _    ) => {}
-   |         ------    ^         ^ expected 4 fields, found 2
+   |                   ^         ^ expected 4 fields, found 2
    |
 help: use `_` to explicitly ignore each field
    |
@@ -125,7 +161,7 @@ help: use `..` to ignore the rest of the fields
 LL |         Point4(   a, ..) => {}
    |                    ~~~~
 
-error: aborting due to 8 previous errors
+error: aborting due to 10 previous errors
 
 Some errors have detailed explanations: E0023, E0532.
 For more information about an error, try `rustc --explain E0023`.
diff --git a/src/test/ui/pattern/pattern-error-continue.stderr b/src/test/ui/pattern/pattern-error-continue.stderr
index efc6723e9ef..c800afdae2a 100644
--- a/src/test/ui/pattern/pattern-error-continue.stderr
+++ b/src/test/ui/pattern/pattern-error-continue.stderr
@@ -32,7 +32,7 @@ LL |     B(isize, isize),
    |       -----  ----- tuple variant has 2 fields
 ...
 LL |         A::B(_, _, _) => (),
-   |         ---- ^  ^  ^ expected 2 fields, found 3
+   |              ^  ^  ^ expected 2 fields, found 3
 
 error[E0308]: mismatched types
   --> $DIR/pattern-error-continue.rs:22:9