1 // Some non-controversial subset of ambiguities "modern macro name" vs "macro_rules" 2 // is disambiguated to mitigate regressions from macro modularization. 3 // Scoping for `macro_rules` behaves like scoping for `let` at module level, in general. 4 5 #![feature(decl_macro)] 6 same_unnamed_mod()7fn same_unnamed_mod() { 8 macro m() { 0 } 9 10 macro_rules! m { () => (()) } 11 12 m!() // OK 13 } 14 nested_unnamed_mod()15fn nested_unnamed_mod() { 16 macro m() { 0 } 17 18 { 19 macro_rules! m { () => (()) } 20 21 m!() // OK 22 } 23 } 24 nested_unnamed_mod_fail()25fn nested_unnamed_mod_fail() { 26 macro_rules! m { () => (()) } 27 28 { 29 macro m() { 0 } 30 31 m!() //~ ERROR `m` is ambiguous 32 } 33 } 34 nexted_named_mod_fail()35fn nexted_named_mod_fail() { 36 macro m() { 0 } 37 38 #[macro_use] 39 mod inner { 40 macro_rules! m { () => (()) } 41 } 42 43 m!() //~ ERROR `m` is ambiguous 44 } 45 main()46fn main() {} 47