| #![crate_type = "lib"] |
| |
| extern crate my_crate; |
| |
| pub fn g() {} // (a) |
| |
| #[macro_export] |
| macro_rules! unhygienic_macro { |
| () => { |
| // (1) unhygienic: depends on `my_crate` in the crate root at the invocation site. |
| ::my_crate::f(); |
| |
| // (2) unhygienic: defines `f` at the invocation site (in addition to the above point). |
| use my_crate::f; |
| f(); |
| |
| g(); // (3) unhygienic: `g` needs to be in scope at use site. |
| |
| $crate::g(); // (4) hygienic: this always resolves to (a) |
| } |
| } |
| |
| #[allow(unused)] |
| fn test_unhygienic() { |
| unhygienic_macro!(); |
| f(); // `f` was defined at the use site |
| } |