| // This is an equivalent of issue #50504, but for declarative macros. |
| |
| #![feature(decl_macro, rustc_attrs)] |
| |
| macro genmod($FromOutside: ident, $Outer: ident) { |
| type A = $FromOutside; |
| struct $Outer; |
| mod inner { |
| type A = $FromOutside; // `FromOutside` shouldn't be available from here |
| type Inner = $Outer; // `Outer` shouldn't be available from here |
| } |
| } |
| |
| #[rustc_macro_transparency = "transparent"] |
| macro genmod_transparent() { |
| type A = FromOutside; |
| struct Outer; |
| mod inner { |
| type A = FromOutside; //~ ERROR cannot find type `FromOutside` in this scope |
| type Inner = Outer; //~ ERROR cannot find type `Outer` in this scope |
| } |
| } |
| |
| macro_rules! genmod_legacy { () => { |
| type A = FromOutside; |
| struct Outer; |
| mod inner { |
| type A = FromOutside; //~ ERROR cannot find type `FromOutside` in this scope |
| type Inner = Outer; //~ ERROR cannot find type `Outer` in this scope |
| } |
| }} |
| |
| fn check() { |
| struct FromOutside; |
| genmod!(FromOutside, Outer); //~ ERROR cannot find type `FromOutside` in this scope |
| //~| ERROR cannot find type `Outer` in this scope |
| } |
| |
| fn check_transparent() { |
| struct FromOutside; |
| genmod_transparent!(); |
| } |
| |
| fn check_legacy() { |
| struct FromOutside; |
| genmod_legacy!(); |
| } |
| |
| fn main() {} |