| // Check that macro expanded underscore imports behave as expected | 
 |  | 
 | // check-pass | 
 |  | 
 | #![feature(decl_macro, rustc_attrs)] | 
 |  | 
 | mod x { | 
 |     pub use std::ops::Not as _; | 
 | } | 
 |  | 
 | macro m() { | 
 |     mod w { | 
 |         mod y { | 
 |             pub use std::ops::Deref as _; | 
 |         } | 
 |         use crate::x::*; | 
 |         use self::y::*; | 
 |         use std::ops::DerefMut as _; | 
 |         fn f() { | 
 |             false.not(); | 
 |             (&()).deref(); | 
 |             (&mut ()).deref_mut(); | 
 |         } | 
 |     } | 
 | } | 
 |  | 
 | #[rustc_macro_transparency = "transparent"] | 
 | macro n() { | 
 |     mod z { | 
 |         pub use std::ops::Deref as _; | 
 |     } | 
 |     use crate::x::*; | 
 |     use crate::z::*; | 
 |     use std::ops::DerefMut as _; | 
 |     fn f() { | 
 |         false.not(); | 
 |         (&()).deref(); | 
 |         (&mut ()).deref_mut(); | 
 |     } | 
 | } | 
 |  | 
 | m!(); | 
 | n!(); | 
 |  | 
 | fn main() {} |