| pub enum En { |
| A(Vec<u8>) |
| } |
| |
| fn get_usize() -> usize { |
| 0 |
| } |
| |
| macro_rules! force_expr { |
| ($e:expr) => { $e } |
| } |
| |
| macro_rules! force_pat { |
| ($a:expr, $b:expr) => { $a..=$b } |
| } |
| |
| macro_rules! make_vec { |
| () => { force_expr!(Vec::new()) } //~ ERROR arbitrary expressions aren't allowed |
| } |
| |
| macro_rules! make_pat { |
| () => { force_pat!(get_usize(), get_usize()) } |
| //~^ ERROR arbitrary expressions aren't allowed |
| //~| ERROR arbitrary expressions aren't allowed |
| } |
| |
| #[allow(unreachable_code)] |
| fn f() -> Result<(), impl core::fmt::Debug> { |
| let x: En = loop {}; |
| |
| assert!(matches!(x, En::A(make_vec!()))); |
| assert!(matches!(5, make_pat!())); |
| Ok::<(), &'static str>(()) |
| } |
| |
| fn main() {} |