//@ 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); }