rust/tests/ui/expr/if/bad-if-let-suggestion.rs
Matthew Jasper 333388fd3c Move let expression checking to parsing
There was an incomplete version of the check in parsing and a second
version in AST validation. This meant that some, but not all, invalid
uses were allowed inside macros/disabled cfgs. It also means that later
passes have a hard time knowing when the let expression is in a valid
location, sometimes causing ICEs.

- Add a field to ExprKind::Let in AST/HIR to mark whether it's in a
  valid location.
- Suppress later errors and MIR construction for invalid let
  expressions.
2023-09-11 15:51:18 +00:00

25 lines
741 B
Rust

// FIXME(compiler-errors): This really should suggest `let` on the RHS of the
// `&&` operator, but that's kinda hard to do because of precedence.
// Instead, for now we just make sure not to suggest `if let let`.
fn a() {
if let x = 1 && i = 2 {}
//~^ ERROR cannot find value `i` in this scope
//~| ERROR `let` expressions in this position are unstable
//~| ERROR mismatched types
//~| ERROR expected expression, found `let` statement
}
fn b() {
if (i + j) = i {}
//~^ ERROR cannot find value `i` in this scope
//~| ERROR cannot find value `i` in this scope
//~| ERROR cannot find value `j` in this scope
}
fn c() {
if x[0] = 1 {}
//~^ ERROR cannot find value `x` in this scope
}
fn main() {}