Skip to content

Commit

Permalink
Rollup merge of rust-lang#59198 - estebank:recovered-pattern, r=zackm…
Browse files Browse the repository at this point in the history
…davis

Do not complain about unmentioned fields in recovered patterns

When the parser has to recover from malformed code in a pattern, do not
complain about missing fields.

Fix rust-lang#59145.
  • Loading branch information
Centril authored Mar 28, 2019
2 parents 20f063a + 6cd6759 commit dcd531e
Show file tree
Hide file tree
Showing 7 changed files with 5 additions and 28 deletions.
2 changes: 1 addition & 1 deletion src/libsyntax/parse/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4734,7 +4734,7 @@ impl<'a> Parser<'a> {
let (fields, etc) = self.parse_pat_fields().unwrap_or_else(|mut e| {
e.emit();
self.recover_stmt();
(vec![], false)
(vec![], true)
});
self.bump();
pat = PatKind::Struct(path, fields, etc);
Expand Down
1 change: 0 additions & 1 deletion src/test/ui/parser/bind-struct-early-modifiers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ fn main() {
struct Foo { x: isize }
match (Foo { x: 10 }) {
Foo { ref x: ref x } => {}, //~ ERROR expected `,`
//~| ERROR pattern does not mention field `x`
_ => {}
}
}
9 changes: 1 addition & 8 deletions src/test/ui/parser/bind-struct-early-modifiers.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,5 @@ error: expected `,`
LL | Foo { ref x: ref x } => {},
| ^

error[E0027]: pattern does not mention field `x`
--> $DIR/bind-struct-early-modifiers.rs:4:9
|
LL | Foo { ref x: ref x } => {},
| ^^^^^^^^^^^^^^^^^^^^ missing field `x`

error: aborting due to 2 previous errors
error: aborting due to previous error

For more information about this error, try `rustc --explain E0027`.
1 change: 0 additions & 1 deletion src/test/ui/parser/issue-10392.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,4 @@ fn a() -> A { panic!() }

fn main() {
let A { , } = a(); //~ ERROR expected ident
//~| ERROR pattern does not mention field `foo`
}
9 changes: 1 addition & 8 deletions src/test/ui/parser/issue-10392.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,5 @@ error: expected identifier, found `,`
LL | let A { , } = a();
| ^ expected identifier

error[E0027]: pattern does not mention field `foo`
--> $DIR/issue-10392.rs:6:9
|
LL | let A { , } = a();
| ^^^^^^^ missing field `foo`

error: aborting due to 2 previous errors
error: aborting due to previous error

For more information about this error, try `rustc --explain E0027`.
2 changes: 1 addition & 1 deletion src/test/ui/resolve/issue-54379.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ fn main() {
let thing = MyStruct { s1: None };

match thing {
MyStruct { .., Some(_) } => {}, //~ ERROR pattern does not mention field `s1`
MyStruct { .., Some(_) } => {},
//~^ ERROR expected `,`
//~| ERROR expected `}`, found `,`
_ => {}
Expand Down
9 changes: 1 addition & 8 deletions src/test/ui/resolve/issue-54379.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,5 @@ error: expected `,`
LL | MyStruct { .., Some(_) } => {},
| ^^^^

error[E0027]: pattern does not mention field `s1`
--> $DIR/issue-54379.rs:9:9
|
LL | MyStruct { .., Some(_) } => {},
| ^^^^^^^^^^^^^^^^^^^^^^^^ missing field `s1`

error: aborting due to 3 previous errors
error: aborting due to 2 previous errors

For more information about this error, try `rustc --explain E0027`.

0 comments on commit dcd531e

Please sign in to comment.