// gate-test-let_chains // Here we test feature gating for ´let_chains`. // See `disallowed-positions.rs` for the grammar // defining the language for gated allowed positions. #![allow(irrefutable_let_patterns)] use std::ops::Range; fn _if() { if let 0 = 1 {} // Stable! if true && let 0 = 1 {} //~^ ERROR `let` expressions in this position are unstable [E0658] if let 0 = 1 && true {} //~^ ERROR `let` expressions in this position are unstable [E0658] if let Range { start: _, end: _ } = (true..true) && false {} //~^ ERROR `let` expressions in this position are unstable [E0658] if let 1 = 1 && let true = { true } && false { //~^ ERROR `let` expressions in this position are unstable [E0658] //~| ERROR `let` expressions in this position are unstable [E0658] } } fn _while() { while let 0 = 1 {} // Stable! while true && let 0 = 1 {} //~^ ERROR `let` expressions in this position are unstable [E0658] while let 0 = 1 && true {} //~^ ERROR `let` expressions in this position are unstable [E0658] while let Range { start: _, end: _ } = (true..true) && false {} //~^ ERROR `let` expressions in this position are unstable [E0658] } fn _macros() { macro_rules! noop_expr { ($e:expr) => {}; } noop_expr!((let 0 = 1)); //~^ ERROR expected expression, found `let` statement macro_rules! use_expr { ($e:expr) => { if $e {} while $e {} } } #[cfg(FALSE)] (let 0 = 1); //~^ ERROR expected expression, found `let` statement use_expr!(let 0 = 1); //~^ ERROR no rules expected the token `let` } fn main() {}