rust/tests/ui/parser/label-is-actually-char.stderr
Nicholas Nethercote 306612ea60 Be more careful about interpreting a label/lifetime as a mistyped char 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.
2024-01-29 11:25:09 +11:00

94 lines
2.4 KiB
Plaintext

error: expected `while`, `for`, `loop` or `{` after a label
--> $DIR/label-is-actually-char.rs:5:15
|
LL | let c = 'a;
| ^ expected `while`, `for`, `loop` or `{` after a label
|
help: add `'` to close the char literal
|
LL | let c = 'a';
| +
error: expected `while`, `for`, `loop` or `{` after a label
--> $DIR/label-is-actually-char.rs:9:17
|
LL | let c = 'abc;
| ^ expected `while`, `for`, `loop` or `{` after a label
error: expected expression, found `;`
--> $DIR/label-is-actually-char.rs:9:17
|
LL | let c = 'abc;
| ^ expected expression
error: unexpected token: `'b`
--> $DIR/label-is-actually-char.rs:16:15
|
LL | 'a'..='b => {}
| ^^
|
help: add `'` to close the char literal
|
LL | 'a'..='b' => {}
| +
error: unexpected token: `'def`
--> $DIR/label-is-actually-char.rs:19:15
|
LL | 'c'..='def => {}
| ^^^^
error: expected pattern, found `=>`
--> $DIR/label-is-actually-char.rs:26:11
|
LL | 'g => {}
| ^^ expected pattern
|
help: add `'` to close the char literal
|
LL | 'g' => {}
| +
error: expected pattern, found `'hij`
--> $DIR/label-is-actually-char.rs:29:8
|
LL | 'hij => {}
| ^^^^ expected pattern
error: expected `while`, `for`, `loop` or `{` after a label
--> $DIR/label-is-actually-char.rs:36:15
|
LL | let x = ['a, 'b, 'cde];
| ^ expected `while`, `for`, `loop` or `{` after a label
|
help: add `'` to close the char literal
|
LL | let x = ['a', 'b, 'cde];
| +
error: expected `while`, `for`, `loop` or `{` after a label
--> $DIR/label-is-actually-char.rs:36:19
|
LL | let x = ['a, 'b, 'cde];
| ^ expected `while`, `for`, `loop` or `{` after a label
|
help: add `'` to close the char literal
|
LL | let x = ['a, 'b', 'cde];
| +
error: expected `while`, `for`, `loop` or `{` after a label
--> $DIR/label-is-actually-char.rs:36:25
|
LL | let x = ['a, 'b, 'cde];
| ^ expected `while`, `for`, `loop` or `{` after a label
error: expected expression, found `]`
--> $DIR/label-is-actually-char.rs:36:25
|
LL | let x = ['a, 'b, 'cde];
| ^ expected expression
error: aborting due to 11 previous errors