blob: 0096e6985d3df0aebfef9fd07fd282531007c85f [file] [log] [blame]
// Here we test Rust 2024 edition 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 chains are only allowed in Rust 2024 or later
if let 0 = 1 && true {}
//~^ ERROR let chains are only allowed in Rust 2024 or later
if let Range { start: _, end: _ } = (true..true) && false {}
//~^ ERROR let chains are only allowed in Rust 2024 or later
if let 1 = 1 && let true = { true } && false {
//~^ ERROR let chains are only allowed in Rust 2024 or later
//~| ERROR let chains are only allowed in Rust 2024 or later
}
}
fn _while() {
while let 0 = 1 {} // Stable!
while true && let 0 = 1 {}
//~^ ERROR let chains are only allowed in Rust 2024 or later
while let 0 = 1 && true {}
//~^ ERROR let chains are only allowed in Rust 2024 or later
while let Range { start: _, end: _ } = (true..true) && false {}
//~^ ERROR let chains are only allowed in Rust 2024 or later
}
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 keyword `let`
}
fn main() {}