|  | #![feature(macro_metavar_expr_concat)] | 
|  |  | 
|  | macro_rules! idents_01 { | 
|  | ($rhs:ident) => { | 
|  | let ${concat(abc, $rhs)}: () = (); | 
|  | //~^ ERROR `${concat(..)}` currently does not support raw identifiers | 
|  | }; | 
|  | } | 
|  |  | 
|  | macro_rules! idents_10 { | 
|  | ($lhs:ident) => { | 
|  | let ${concat($lhs, abc)}: () = (); | 
|  | //~^ ERROR `${concat(..)}` currently does not support raw identifiers | 
|  | }; | 
|  | } | 
|  |  | 
|  | macro_rules! idents_11 { | 
|  | ($lhs:ident, $rhs:ident) => { | 
|  | let ${concat($lhs, $rhs)}: () = (); | 
|  | //~^ ERROR `${concat(..)}` currently does not support raw identifiers | 
|  | //~| ERROR `${concat(..)}` currently does not support raw identifiers | 
|  | //~| ERROR `${concat(..)}` currently does not support raw identifiers | 
|  | }; | 
|  | } | 
|  |  | 
|  | macro_rules! no_params { | 
|  | () => { | 
|  | let ${concat(r#abc, abc)}: () = (); | 
|  | //~^ ERROR expected identifier or string literal | 
|  | //~| ERROR expected pattern, found `$` | 
|  |  | 
|  | let ${concat(abc, r#abc)}: () = (); | 
|  | //~^ ERROR expected identifier or string literal | 
|  |  | 
|  | let ${concat(r#abc, r#abc)}: () = (); | 
|  | //~^ ERROR expected identifier or string literal | 
|  | }; | 
|  | } | 
|  |  | 
|  | macro_rules! tts_01 { | 
|  | ($rhs:tt) => { | 
|  | let ${concat(abc, $rhs)}: () = (); | 
|  | //~^ ERROR `${concat(..)}` currently does not support raw identifiers | 
|  | }; | 
|  | } | 
|  |  | 
|  | macro_rules! tts_10 { | 
|  | ($lhs:tt) => { | 
|  | let ${concat($lhs, abc)}: () = (); | 
|  | //~^ ERROR `${concat(..)}` currently does not support raw identifiers | 
|  | }; | 
|  | } | 
|  |  | 
|  | macro_rules! tts_11 { | 
|  | ($lhs:tt, $rhs:tt) => { | 
|  | let ${concat($lhs, $rhs)}: () = (); | 
|  | //~^ ERROR `${concat(..)}` currently does not support raw identifiers | 
|  | //~| ERROR `${concat(..)}` currently does not support raw identifiers | 
|  | //~| ERROR `${concat(..)}` currently does not support raw identifiers | 
|  | }; | 
|  | } | 
|  |  | 
|  | fn main() { | 
|  | idents_01!(r#_c); | 
|  |  | 
|  | idents_10!(r#_c); | 
|  |  | 
|  | idents_11!(r#_c, d); | 
|  | idents_11!(_e, r#f); | 
|  | idents_11!(r#_g, r#h); | 
|  |  | 
|  | tts_01!(r#_c); | 
|  |  | 
|  | tts_10!(r#_c); | 
|  |  | 
|  | tts_11!(r#_c, d); | 
|  | tts_11!(_e, r#f); | 
|  | tts_11!(r#_g, r#h); | 
|  |  | 
|  | no_params!(); | 
|  | } |