// check-pass #![allow(dead_code)] // ignore-pretty pretty-printing is unhygienic // aux-build:legacy_interaction.rs #![feature(decl_macro)] #[allow(unused)] extern crate legacy_interaction; // ^ defines // ```rust // macro_rules! m { // () => { // fn f() {} // (1) // g() // (2) // } // } // ```rust mod def_site { // Unless this macro opts out of hygiene, it should resolve the same wherever it is invoked. pub macro m2() { ::legacy_interaction::m!(); f(); // This should resolve to (1) fn g() {} // We want (2) resolve to this, not to (4) } } mod use_site { fn test() { fn f() -> bool { true } // (3) fn g() -> bool { true } // (4) ::def_site::m2!(); let _: bool = f(); // This should resolve to (3) let _: bool = g(); // This should resolve to (4) } } fn main() {}