|  | // Make sure that underscore imports have the same hygiene considerations as other imports. | 
|  |  | 
|  | //@ check-pass | 
|  |  | 
|  | #![feature(decl_macro)] | 
|  | #![allow(noop_method_call)] | 
|  |  | 
|  | mod x { | 
|  | pub use std::ops::Deref as _; | 
|  | } | 
|  |  | 
|  | macro glob_import() { | 
|  | pub use crate::x::*; | 
|  | } | 
|  |  | 
|  | macro underscore_import() { | 
|  | use std::ops::DerefMut as _; | 
|  | } | 
|  |  | 
|  | mod y { | 
|  | crate::glob_import!(); | 
|  | crate::underscore_import!(); | 
|  | } | 
|  |  | 
|  | macro create_module($y:ident) { | 
|  | mod $y { | 
|  | crate::glob_import!(); | 
|  | crate::underscore_import!(); | 
|  | } | 
|  | } | 
|  |  | 
|  | create_module!(z); | 
|  |  | 
|  | fn main() { | 
|  | use crate::y::*; | 
|  | use crate::z::*; | 
|  | glob_import!(); | 
|  | underscore_import!(); | 
|  | (&()).deref(); | 
|  | (&mut ()).deref_mut(); | 
|  | } |