Skip to content

Commit

Permalink
Avoid unnecessary pattern parse errors on ref box
Browse files Browse the repository at this point in the history
  • Loading branch information
estebank committed Nov 29, 2023
1 parent cb08634 commit 88453aa
Show file tree
Hide file tree
Showing 4 changed files with 5 additions and 27 deletions.
6 changes: 3 additions & 3 deletions compiler/rustc_parse/src/parser/pat.rs
Original file line number Diff line number Diff line change
Expand Up @@ -391,10 +391,10 @@ impl<'a> Parser<'a> {
self.parse_pat_ident_mut(syntax_loc)?
} else if self.eat_keyword(kw::Ref) {
if self.check_keyword(kw::Box) {
// Suggest `box ref` and quit parsing pattern to prevent series of
// misguided diagnostics from later stages of the compiler.
// Suggest `box ref`.
let span = self.prev_token.span.to(self.token.span);
return Err(self.sess.create_err(SwitchRefBoxOrder { span }));
self.bump();
self.sess.emit_err(SwitchRefBoxOrder { span });
}
// Parse ref ident @ pat / ref mut ident @ pat
let mutbl = self.parse_mutability();
Expand Down
4 changes: 1 addition & 3 deletions tests/ui/pattern/pattern-bad-ref-box-order.fixed
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,8 @@

fn foo(f: Option<Box<i32>>) {
match f {
Some(box ref, _i) => {},
Some(box ref _i) => {},
//~^ ERROR switch the order of `ref` and `box`
//~| ERROR expected one of `)`, `,`, or `|`, found `_i`
//~| ERROR this pattern has 2 fields, but the corresponding tuple variant has 1 field
None => {}
}
}
Expand Down
2 changes: 0 additions & 2 deletions tests/ui/pattern/pattern-bad-ref-box-order.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@ fn foo(f: Option<Box<i32>>) {
match f {
Some(ref box _i) => {},
//~^ ERROR switch the order of `ref` and `box`
//~| ERROR expected one of `)`, `,`, or `|`, found `_i`
//~| ERROR this pattern has 2 fields, but the corresponding tuple variant has 1 field
None => {}
}
}
Expand Down
20 changes: 1 addition & 19 deletions tests/ui/pattern/pattern-bad-ref-box-order.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,5 @@ error: switch the order of `ref` and `box`
LL | Some(ref box _i) => {},
| ^^^^^^^ help: swap them: `box ref`

error: expected one of `)`, `,`, or `|`, found `_i`
--> $DIR/pattern-bad-ref-box-order.rs:8:22
|
LL | Some(ref box _i) => {},
| -^^ expected one of `)`, `,`, or `|`
| |
| help: missing `,`

error[E0023]: this pattern has 2 fields, but the corresponding tuple variant has 1 field
--> $DIR/pattern-bad-ref-box-order.rs:8:22
|
LL | Some(ref box _i) => {},
| ^^ expected 1 field, found 2
--> $SRC_DIR/core/src/option.rs:LL:COL
|
= note: tuple variant has 1 field

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

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

0 comments on commit 88453aa

Please sign in to comment.