// 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() {}
