mod m {
    pub enum E {
        Fn(u8),
        Struct {
            s: u8,
        },
        Unit,
    }

    pub mod n {
        pub(in crate::m) enum Z {
            Fn(u8),
            Struct {
                s: u8,
            },
            Unit,
        }
    }

    use crate::m::n::Z; // OK, only the type is imported

    fn f() {
        n::Z;
        //~^ ERROR expected value, found enum `n::Z`
        Z;
        //~^ ERROR expected value, found enum `Z`
        let _: Z = Z::Fn;
        //~^ ERROR mismatched types
        let _: Z = Z::Struct;
        //~^ ERROR expected value, found struct variant `Z::Struct`
        let _ = Z::Unit();
        //~^ ERROR expected function, found enum variant `Z::Unit`
        let _ = Z::Unit {};
        // This is ok, it is equivalent to not having braces
    }
}

use m::E; // OK, only the type is imported

fn main() {
    let _: E = m::E;
    //~^ ERROR expected value, found enum `m::E`
    let _: E = m::E::Fn;
    //~^ ERROR mismatched types
    let _: E = m::E::Struct;
    //~^ ERROR expected value, found struct variant `m::E::Struct`
    let _: E = m::E::Unit();
    //~^ ERROR expected function, found enum variant `m::E::Unit`
    let _: E = E;
    //~^ ERROR expected value, found enum `E`
    let _: E = E::Fn;
    //~^ ERROR mismatched types
    let _: E = E::Struct;
    //~^ ERROR expected value, found struct variant `E::Struct`
    let _: E = E::Unit();
    //~^ ERROR expected function, found enum variant `E::Unit`
    let _: Z = m::n::Z;
    //~^ ERROR cannot find type `Z` in this scope
    //~| ERROR expected value, found enum `m::n::Z`
    //~| ERROR enum `Z` is private
    let _: Z = m::n::Z::Fn;
    //~^ ERROR cannot find type `Z` in this scope
    //~| ERROR enum `Z` is private
    let _: Z = m::n::Z::Struct;
    //~^ ERROR cannot find type `Z` in this scope
    //~| ERROR expected value, found struct variant `m::n::Z::Struct`
    //~| ERROR enum `Z` is private
    let _: Z = m::n::Z::Unit {};
    //~^ ERROR cannot find type `Z` in this scope
    //~| ERROR enum `Z` is private
}
