diff options
Diffstat (limited to 'tests/ui/proc-macro/weird-hygiene.rs')
-rw-r--r-- | tests/ui/proc-macro/weird-hygiene.rs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/tests/ui/proc-macro/weird-hygiene.rs b/tests/ui/proc-macro/weird-hygiene.rs new file mode 100644 index 000000000..7ba3f98a7 --- /dev/null +++ b/tests/ui/proc-macro/weird-hygiene.rs @@ -0,0 +1,46 @@ +// aux-build:weird-hygiene.rs + +#![feature(stmt_expr_attributes)] +#![feature(proc_macro_hygiene)] + +extern crate weird_hygiene; +use weird_hygiene::*; + +macro_rules! other { + ($tokens:expr) => { + macro_rules! call_it { + ($outer_ident:ident) => { + macro_rules! inner { + () => { + $outer_ident; + } + } + } + } + + #[derive(WeirdDerive)] + enum MyEnum { + Value = (stringify!($tokens + hidden_ident), 1).1 //~ ERROR cannot find + } + + inner!(); + } +} + +macro_rules! invoke_it { + ($token:expr) => { + #[recollect_attr] { + $token; + hidden_ident //~ ERROR cannot find + } + } +} + +fn main() { + // `other` and `invoke_it` are both macro_rules! macros, + // so it should be impossible for them to ever see `hidden_ident`, + // even if they invoke a proc macro. + let hidden_ident = "Hello1"; + other!(50); + invoke_it!(25); +} |