1
Fork 0
rust/compiler/rustc_parse/src
Guillaume Gomez c00192ae2a
Rollup merge of #120460 - nnethercote:fix-120397, r=compiler-errors
Be more careful about interpreting a label/lifetime as a mistyped char literal.

Currently the parser interprets any label/lifetime in certain positions as a mistyped char literal, on the assumption that the trailing single quote was accidentally omitted. In such cases it gives an error with a suggestion to add the trailing single quote, and then puts the appropriate char literal into the AST. This behaviour was introduced in #101293.

This is reasonable for a case like this:
```
let c = 'a;
```
because `'a'` is a valid char literal. It's less reasonable for a case like this:
```
let c = 'abc;
```
because `'abc'` is not a valid char literal.

Prior to #120329 this could result in some sub-optimal suggestions in error messages, but nothing else. But #120329 changed `LitKind::from_token_lit` to assume that the char/byte/string literals it receives are valid, and to assert if not. This is reasonable because the lexer does not produce invalid char/byte/string literals in general. But in this "interpret label/lifetime as unclosed char literal" case the parser can produce an invalid char literal with contents such as `abc`, which triggers an assertion failure.

This PR changes the parser so it's more cautious about interpreting labels/lifetimes as unclosed char literals.

Fixes #120397.

r? `@compiler-errors`
2024-01-30 11:19:19 +01:00
..
lexer Stop using String for error codes. 2024-01-29 07:41:41 +11:00
parser Rollup merge of #120460 - nnethercote:fix-120397, r=compiler-errors 2024-01-30 11:19:19 +01:00
errors.rs Rollup merge of #118625 - ShE3py:expr-in-pats, r=WaffleLapkin 2024-01-29 12:56:51 +00:00
lib.rs Remove unused features 2024-01-25 14:01:33 +00:00
validate_attr.rs Rename consuming chaining methods on DiagnosticBuilder. 2024-01-10 07:40:00 +11:00