mod m {
    mod m1 {
        pub struct S {}
    }
    mod m2 {
        // Note this derive, it makes this struct macro-expanded,
        // so it doesn't appear in time to participate in the initial resolution of `use m::S`,
        // only in the later validation pass.
        #[derive(Default)]
        pub struct S {}
    }

    // Create a glob vs glob ambiguity
    pub use self::m1::*;
    pub use self::m2::*;
}

fn main() {
    use m::S; //~ ERROR `S` is ambiguous
    let s = S {};
}