2025-06-30 07:49:20 -05:00

59 lines
1.6 KiB
Rust
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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() {}