- 
                Notifications
    You must be signed in to change notification settings 
- Fork 13.9k
Open
Labels
A-diagnosticsArea: Messages for errors, warnings, and lintsArea: Messages for errors, warnings, and lintsA-parserArea: The lexing & parsing of Rust source code to an ASTArea: The lexing & parsing of Rust source code to an ASTT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.
Description
Code
fn main() {
    let mut y: i32 = 0;
    if let x = 1 && y += 2 {};
}Current output
error: expected expression, found `let` statement
 --> src/main.rs:3:8
  |
3 |     if let x = 1 && y += 2 {};
  |        ^^^^^^^^^
  |
  = note: only supported directly in conditions of `if` and `while` expressions
error[E0308]: mismatched types
 --> src/main.rs:3:21
  |
3 |     if let x = 1 && y += 2 {};
  |                     ^ expected `bool`, found `i32`
error[E0368]: binary assignment operation `+=` cannot be applied to type `bool`
 --> src/main.rs:3:8
  |
3 |     if let x = 1 && y += 2 {};
  |        --------------^^^^^
  |        |
  |        cannot use `+=` on type `bool`
error[E0067]: invalid left-hand side of assignment
 --> src/main.rs:3:23
  |
3 |     if let x = 1 && y += 2 {};
  |        -------------- ^^
  |        |
  |        cannot assign to this expression
Some errors have detailed explanations: E0067, E0308, E0368.
For more information about an error, try `rustc --explain E0067`.
error: could not compile `playground` (bin "playground") due to 4 previous errorsDesired output
Rationale and extra context
I find the error very confusing, since it doesn't point to the actual problem, which is that += isn't allowed in let chains.
Inspecting the AST with -Zunpretty=ast-tree, it seems that rustc is trying to parse the thing as:
if (((let x = 1) && y) += 2) {};which doesn't make a ton of sense to me.
Other cases
Rust Version
Reproducible on the playground with version: 1.92.0-nightly (2025-10-13 4b94758d2ba7d0ef71cc)Anything else?
No response
Metadata
Metadata
Assignees
Labels
A-diagnosticsArea: Messages for errors, warnings, and lintsArea: Messages for errors, warnings, and lintsA-parserArea: The lexing & parsing of Rust source code to an ASTArea: The lexing & parsing of Rust source code to an ASTT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.