// Some non-controversial subset of ambiguities "modern macro name" vs "macro_rules" // is disambiguated to mitigate regressions from macro modularization. // Scoping for `macro_rules` behaves like scoping for `let` at module level, in general. #![feature(decl_macro)] fn same_unnamed_mod() { macro m() { 0 } macro_rules! m { () => (()) } m!() // OK } fn nested_unnamed_mod() { macro m() { 0 } { macro_rules! m { () => (()) } m!() // OK } } fn nested_unnamed_mod_fail() { macro_rules! m { () => (()) } { macro m() { 0 } m!() //~ ERROR `m` is ambiguous } } fn nexted_named_mod_fail() { macro m() { 0 } #[macro_use] mod inner { macro_rules! m { () => (()) } } m!() //~ ERROR `m` is ambiguous } fn main() {}