| #![feature(yeet_expr)] | |
| #![allow(incomplete_features)] // Necessary for now, while explicit_tail_calls is incomplete | |
| #![feature(explicit_tail_calls)] | |
| fn a() { | |
| let 0 = { | |
| 1 | |
| } else { | |
| //~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed | |
| return; | |
| }; | |
| } | |
| fn b() { | |
| let foo = for i in 1..2 { | |
| break; | |
| } else { | |
| //~^ ERROR `for...else` loops are not supported | |
| return; | |
| }; | |
| } | |
| fn c() { | |
| let 0 = if true { | |
| 1 | |
| } else { | |
| 0 | |
| } else { | |
| //~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed | |
| return; | |
| }; | |
| } | |
| fn d() { | |
| let foo = loop { | |
| break; | |
| } else { | |
| //~^ ERROR loop...else` loops are not supported | |
| return; | |
| }; | |
| } | |
| fn e() { | |
| let 0 = match true { | |
| true => 1, | |
| false => 0 | |
| } else { | |
| //~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed | |
| return; | |
| }; | |
| } | |
| fn f() { | |
| struct X { | |
| a: i32, | |
| } | |
| let X { a: 0 } = X { | |
| a: 1 | |
| } else { | |
| //~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed | |
| return; | |
| }; | |
| } | |
| fn g() { | |
| let foo = while false { | |
| break; | |
| } else { | |
| //~^ ERROR `while...else` loops are not supported | |
| return; | |
| }; | |
| } | |
| fn h() { | |
| let 0 = const { | |
| 1 | |
| } else { | |
| //~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed | |
| return; | |
| }; | |
| } | |
| fn i() { | |
| let 0 = &{ | |
| 1 | |
| } else { | |
| //~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed | |
| return; | |
| }; | |
| } | |
| fn j() { | |
| let mut bar = 0; | |
| let foo = bar = { | |
| 1 | |
| } else { | |
| //~^ WARN unreachable `else` clause | |
| //~| ERROR right curly brace `}` before `else` in a `let...else` statement not allowed | |
| return; | |
| }; | |
| } | |
| fn k() { | |
| let 0 = 1 + { | |
| 1 | |
| } else { | |
| //~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed | |
| return; | |
| }; | |
| } | |
| fn l() { | |
| const RANGE: std::ops::Range<u8> = 0..0; | |
| let RANGE = 1..{ | |
| 1 | |
| } else { | |
| //~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed | |
| return; | |
| }; | |
| } | |
| fn m() { | |
| let 0 = return { | |
| () | |
| } else { | |
| //~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed | |
| return; | |
| }; | |
| } | |
| fn n() { | |
| let 0 = -{ | |
| 1 | |
| } else { | |
| //~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed | |
| return; | |
| }; | |
| } | |
| fn o() -> Result<(), ()> { | |
| let 0 = do yeet { | |
| () | |
| } else { | |
| //~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed | |
| return Ok(()); | |
| }; | |
| } | |
| // fn p() { // FIXME(explicit_tail_calls): this currently trips an assertion... | |
| // let 0 = become { | |
| // () | |
| // } else { | |
| // // ~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed | |
| // return; | |
| // }; | |
| // } | |
| fn q() { | |
| let foo = |x: i32| { | |
| x | |
| } else { | |
| //~^ WARN unreachable `else` clause | |
| //~| ERROR right curly brace `}` before `else` in a `let...else` statement not allowed | |
| return; | |
| }; | |
| } | |
| fn r() { | |
| let ok = format_args!("") else { return; }; | |
| //~^ WARN unreachable `else` clause | |
| let bad = format_args! {""} else { return; }; | |
| //~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed | |
| //~| WARN unreachable `else` clause | |
| } | |
| fn s() { | |
| macro_rules! a { | |
| () => { | |
| { 1 } | |
| }; | |
| } | |
| macro_rules! b { | |
| (1) => { | |
| let 0 = a!() else { return; }; | |
| }; | |
| (2) => { | |
| let 0 = a! {} else { return; }; | |
| //~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed | |
| }; | |
| } | |
| b!(1); | |
| b!(2); | |
| } | |
| fn t() { | |
| macro_rules! primitive { | |
| (8) => { u8 }; | |
| } | |
| let foo = &std::ptr::null as &'static dyn std::ops::Fn() -> *const primitive! { | |
| 8 | |
| } else { | |
| //~^ WARN unreachable `else` clause | |
| //~| ERROR right curly brace `}` before `else` in a `let...else` statement not allowed | |
| return; | |
| }; | |
| } | |
| fn main() {} |