macro_rules! foo { () => { break (); //~ ERROR `break` outside of a loop or labeled block }; ($e: expr) => { break $e; //~ ERROR `break` outside of a loop or labeled block }; (stmt $s: stmt) => { $s }; (@ $e: expr) => { { break $e; } //~ ERROR `break` outside of a loop or labeled block }; (=> $s: stmt) => { { $s } }; } fn main() { { foo!(); } { foo!(()); } { foo!(stmt break ()); //~ ERROR `break` outside of a loop or labeled block } { foo!(@ ()); } { foo!(=> break ()); //~ ERROR `break` outside of a loop or labeled block } { macro_rules! bar { () => { break () //~ ERROR `break` outside of a loop or labeled block }; } bar!() } }