//@ run-pass
#![allow(non_snake_case)]


// Check we do the correct privacy checks when we import a name and there is an
// item with that name in both the value and type namespaces.

//@ pretty-expanded FIXME #23616

#![allow(dead_code)]
#![allow(unused_imports)]


// public type, private value
pub mod foo1 {
    pub trait Bar {
        fn dummy(&self) { }
    }
    pub struct Baz;

    fn Bar() { }
}

fn test_unused1() {
    use foo1::*;
}

fn test_single1() {
    use foo1::Bar;

    let _x: Box<dyn Bar>;
}

fn test_list1() {
    use foo1::{Bar,Baz};

    let _x: Box<dyn Bar>;
}

fn test_glob1() {
    use foo1::*;

    let _x: Box<dyn Bar>;
}

// private type, public value
pub mod foo2 {
    trait Bar {
        fn dummy(&self) { }
    }
    pub struct Baz;

    pub fn Bar() { }
}

fn test_unused2() {
    use foo2::*;
}

fn test_single2() {
    use foo2::Bar;

    Bar();
}

fn test_list2() {
    use foo2::{Bar,Baz};

    Bar();
}

fn test_glob2() {
    use foo2::*;

    Bar();
}

// public type, public value
pub mod foo3 {
    pub trait Bar {
        fn dummy(&self) { }
    }
    pub struct Baz;

    pub fn Bar() { }
}

fn test_unused3() {
    use foo3::*;
}

fn test_single3() {
    use foo3::Bar;

    Bar();
    let _x: Box<dyn Bar>;
}

fn test_list3() {
    use foo3::{Bar,Baz};

    Bar();
    let _x: Box<dyn Bar>;
}

fn test_glob3() {
    use foo3::*;

    Bar();
    let _x: Box<dyn Bar>;
}

fn main() {
}
