// Modules generated by transparent proc macros still acts as barriers for names (issue #50504).

//@ proc-macro: generate-mod.rs
//@ ignore-backends: gcc

extern crate generate_mod;

struct FromOutside;

generate_mod::check!(); //~ ERROR cannot find type `FromOutside` in this scope
                        //~| ERROR cannot find type `Outer` in this scope

#[generate_mod::check_attr] //~ ERROR cannot find type `FromOutside` in this scope
                            //~| ERROR cannot find type `OuterAttr` in this scope
struct S;

#[derive(generate_mod::CheckDerive)] //~ ERROR cannot find type `FromOutside` in this scope
                                     //~| ERROR cannot find type `OuterDerive` in this scope
                                     //~| WARN this was previously accepted
                                     //~| WARN this was previously accepted
struct Z;

fn inner_block() {
    #[derive(generate_mod::CheckDerive)] //~ ERROR cannot find type `FromOutside` in this scope
                                        //~| ERROR cannot find type `OuterDerive` in this scope
                                        //~| WARN this was previously accepted
                                        //~| WARN this was previously accepted
    struct InnerZ;
}

#[derive(generate_mod::CheckDeriveLint)] // OK, lint is suppressed
struct W;

fn main() {}
