@@ -3,10 +3,11 @@ use rustc_ast::ptr::P;
33use rustc_ast:: visit:: AssocCtxt ;
44use rustc_ast:: * ;
55use rustc_errors:: ErrorGuaranteed ;
6- use rustc_hir:: def:: { DefKind , Res } ;
6+ use rustc_hir:: def:: { DefKind , PerNS , Res } ;
77use rustc_hir:: def_id:: { CRATE_DEF_ID , LocalDefId } ;
88use rustc_hir:: { self as hir, HirId , LifetimeSource , PredicateOrigin } ;
99use rustc_index:: { IndexSlice , IndexVec } ;
10+ use rustc_middle:: span_bug;
1011use rustc_middle:: ty:: { ResolverAstLowering , TyCtxt } ;
1112use rustc_span:: edit_distance:: find_best_match_for_name;
1213use rustc_span:: { DUMMY_SP , DesugaringKind , Ident , Span , Symbol , kw, sym} ;
@@ -527,7 +528,22 @@ impl<'hir> LoweringContext<'_, 'hir> {
527528 }
528529 UseTreeKind :: Glob => {
529530 let res = self . expect_full_res ( id) ;
530- let res = smallvec ! [ self . lower_res( res) ] ;
531+ let res = self . lower_res ( res) ;
532+ // Put the result in the appropriate namespace.
533+ let res = match res {
534+ Res :: Def ( DefKind :: Mod | DefKind :: Trait , _) => {
535+ PerNS { type_ns : Some ( res) , value_ns : None , macro_ns : None }
536+ }
537+ Res :: Def ( DefKind :: Enum , _) => {
538+ PerNS { type_ns : None , value_ns : Some ( res) , macro_ns : None }
539+ }
540+ Res :: Err => {
541+ // Propagate the error to all namespaces, just to be sure.
542+ let err = Some ( Res :: Err ) ;
543+ PerNS { type_ns : err, value_ns : err, macro_ns : err }
544+ }
545+ _ => span_bug ! ( path. span, "bad glob res {:?}" , res) ,
546+ } ;
531547 let path = Path { segments, span : path. span , tokens : None } ;
532548 let path = self . lower_use_path ( res, & path, ParamMode :: Explicit ) ;
533549 hir:: ItemKind :: Use ( path, hir:: UseKind :: Glob )
@@ -601,7 +617,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
601617 } else {
602618 // For non-empty lists we can just drop all the data, the prefix is already
603619 // present in HIR as a part of nested imports.
604- self . arena . alloc ( hir:: UsePath { res : smallvec ! [ ] , segments : & [ ] , span } )
620+ self . arena . alloc ( hir:: UsePath { res : PerNS :: default ( ) , segments : & [ ] , span } )
605621 } ;
606622 hir:: ItemKind :: Use ( path, hir:: UseKind :: ListStem )
607623 }
0 commit comments