-
Notifications
You must be signed in to change notification settings - Fork 12.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Be more careful about interpreting a label/lifetime as a mistyped cha…
…r literal. Currently the parser will interpret any label/lifetime in certain positions as a mistyped char literal, on the assumption that the trailing single quote was accidentally omitted. This is reasonable for a something like 'a (because 'a' would be valid) but not reasonable for a something like 'abc (because 'abc' is not valid). This commit restricts this behaviour only to labels/lifetimes that would be valid char literals, via the new `could_be_unclosed_char_literal` function. The commit also augments the `label-is-actually-char.rs` test in a couple of ways: - Adds testing of labels/lifetimes with identifiers longer than one char, e.g. 'abc. - Adds a new match with simpler patterns, because the `recover_unclosed_char` call in `parse_pat_with_range_pat` was not being exercised (in this test or any other ui tests). Fixes #120397, an assertion failure, which was caused by this behaviour in the parser interacting with some new stricter char literal checking added in #120329.
- Loading branch information
1 parent
5bda589
commit 306612e
Showing
4 changed files
with
112 additions
and
23 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,16 +1,43 @@ | ||
// Note: it's ok to interpret 'a as 'a', but but not ok to interpret 'abc as | ||
// 'abc' because 'abc' is not a valid char literal. | ||
|
||
fn main() { | ||
let c = 'a; | ||
//~^ ERROR expected `while`, `for`, `loop` or `{` after a label | ||
//~| HELP add `'` to close the char literal | ||
match c { | ||
|
||
let c = 'abc; | ||
//~^ ERROR expected `while`, `for`, `loop` or `{` after a label | ||
//~| ERROR expected expression, found `;` | ||
} | ||
|
||
fn f() { | ||
match 'a' { | ||
'a'..='b => {} | ||
//~^ ERROR unexpected token: `'b` | ||
//~| HELP add `'` to close the char literal | ||
_ => {} | ||
'c'..='def => {} | ||
//~^ ERROR unexpected token: `'def` | ||
} | ||
let x = ['a, 'b]; | ||
//~^ ERROR expected `while`, `for`, `loop` or `{` after a label | ||
//~| ERROR expected `while`, `for`, `loop` or `{` after a label | ||
//~| HELP add `'` to close the char literal | ||
//~| HELP add `'` to close the char literal | ||
} | ||
|
||
fn g() { | ||
match 'g' { | ||
'g => {} | ||
//~^ ERROR expected pattern, found `=>` | ||
//~| HELP add `'` to close the char literal | ||
'hij => {} | ||
//~^ ERROR expected pattern, found `'hij` | ||
_ => {} | ||
} | ||
} | ||
|
||
fn h() { | ||
let x = ['a, 'b, 'cde]; | ||
//~^ ERROR expected `while`, `for`, `loop` or `{` after a label | ||
//~| HELP add `'` to close the char literal | ||
//~| ERROR expected `while`, `for`, `loop` or `{` after a label | ||
//~| HELP add `'` to close the char literal | ||
//~| ERROR expected `while`, `for`, `loop` or `{` after a label | ||
//~| ERROR expected expression, found `]` | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters