@@ -865,6 +865,7 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
865865 // This is only a guess, two equivalent idents may incorrectly get different gensyms here.
866866 let ident = ident. gensym_if_underscore ( ) ;
867867 let expansion = ExpnId :: root ( ) ; // FIXME(jseyfried) intercrate hygiene
868+ // Record primary definitions.
868869 match res {
869870 Res :: Def ( kind @ DefKind :: Mod , def_id)
870871 | Res :: Def ( kind @ DefKind :: Enum , def_id)
@@ -874,53 +875,52 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
874875 def_id,
875876 expansion,
876877 span) ;
877- self . r . define ( parent, ident, TypeNS , ( module, vis, DUMMY_SP , expansion) ) ;
878+ self . r . define ( parent, ident, TypeNS , ( module, vis, span , expansion) ) ;
878879 }
879- Res :: Def ( DefKind :: Variant , _)
880+ Res :: Def ( DefKind :: Struct , _)
881+ | Res :: Def ( DefKind :: Union , _)
882+ | Res :: Def ( DefKind :: Variant , _)
880883 | Res :: Def ( DefKind :: TyAlias , _)
881884 | Res :: Def ( DefKind :: ForeignTy , _)
882885 | Res :: Def ( DefKind :: OpaqueTy , _)
883886 | Res :: Def ( DefKind :: TraitAlias , _)
884887 | Res :: Def ( DefKind :: AssocTy , _)
885888 | Res :: Def ( DefKind :: AssocOpaqueTy , _)
886889 | Res :: PrimTy ( ..)
887- | Res :: ToolMod => {
888- self . r . define ( parent, ident, TypeNS , ( res, vis, DUMMY_SP , expansion) ) ;
889- }
890+ | Res :: ToolMod =>
891+ self . r . define ( parent, ident, TypeNS , ( res, vis, span, expansion) ) ,
890892 Res :: Def ( DefKind :: Fn , _)
893+ | Res :: Def ( DefKind :: Method , _)
891894 | Res :: Def ( DefKind :: Static , _)
892895 | Res :: Def ( DefKind :: Const , _)
893896 | Res :: Def ( DefKind :: AssocConst , _)
894- | Res :: Def ( DefKind :: Ctor ( CtorOf :: Variant , ..) , _) => {
895- self . r . define ( parent, ident, ValueNS , ( res, vis, DUMMY_SP , expansion) ) ;
896- }
897- Res :: Def ( DefKind :: Ctor ( CtorOf :: Struct , ..) , def_id) => {
898- self . r . define ( parent, ident, ValueNS , ( res, vis, DUMMY_SP , expansion) ) ;
899-
900- if let Some ( struct_def_id) =
901- self . r . cstore . def_key ( def_id) . parent
902- . map ( |index| DefId { krate : def_id. krate , index : index } ) {
903- self . r . struct_constructors . insert ( struct_def_id, ( res, vis) ) ;
904- }
897+ | Res :: Def ( DefKind :: Ctor ( ..) , _) =>
898+ self . r . define ( parent, ident, ValueNS , ( res, vis, span, expansion) ) ,
899+ Res :: Def ( DefKind :: Macro ( ..) , _)
900+ | Res :: NonMacroAttr ( ..) =>
901+ self . r . define ( parent, ident, MacroNS , ( res, vis, span, expansion) ) ,
902+ Res :: Def ( DefKind :: TyParam , _) | Res :: Def ( DefKind :: ConstParam , _)
903+ | Res :: Local ( ..) | Res :: SelfTy ( ..) | Res :: SelfCtor ( ..) | Res :: Err =>
904+ bug ! ( "unexpected resolution: {:?}" , res)
905+ }
906+ // Record some extra data for better diagnostics.
907+ match res {
908+ Res :: Def ( DefKind :: Struct , def_id) | Res :: Def ( DefKind :: Union , def_id) => {
909+ let field_names = self . r . cstore . struct_field_names_untracked ( def_id) ;
910+ self . insert_field_names ( def_id, field_names) ;
905911 }
906912 Res :: Def ( DefKind :: Method , def_id) => {
907- self . r . define ( parent, ident, ValueNS , ( res, vis, DUMMY_SP , expansion) ) ;
908-
909913 if self . r . cstore . associated_item_cloned_untracked ( def_id) . method_has_self_argument {
910914 self . r . has_self . insert ( def_id) ;
911915 }
912916 }
913- Res :: Def ( DefKind :: Struct , def_id) | Res :: Def ( DefKind :: Union , def_id) => {
914- self . r . define ( parent, ident, TypeNS , ( res, vis, DUMMY_SP , expansion) ) ;
915-
916- // Record field names for error reporting.
917- let field_names = self . r . cstore . struct_field_names_untracked ( def_id) ;
918- self . insert_field_names ( def_id, field_names) ;
919- }
920- Res :: Def ( DefKind :: Macro ( ..) , _) | Res :: NonMacroAttr ( ..) => {
921- self . r . define ( parent, ident, MacroNS , ( res, vis, DUMMY_SP , expansion) ) ;
917+ Res :: Def ( DefKind :: Ctor ( CtorOf :: Struct , ..) , def_id) => {
918+ let parent = self . r . cstore . def_key ( def_id) . parent ;
919+ if let Some ( struct_def_id) = parent. map ( |index| DefId { index, ..def_id } ) {
920+ self . r . struct_constructors . insert ( struct_def_id, ( res, vis) ) ;
921+ }
922922 }
923- _ => bug ! ( "unexpected resolution: {:?}" , res )
923+ _ => { }
924924 }
925925 }
926926
@@ -981,7 +981,7 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
981981 if let Some ( span) = import_all {
982982 let directive = macro_use_directive ( self , span) ;
983983 self . r . potentially_unused_imports . push ( directive) ;
984- module . for_each_child ( & mut self . r , |this, ident, ns, binding| if ns == MacroNS {
984+ self . r . for_each_child ( module , |this, ident, ns, binding| if ns == MacroNS {
985985 let imported_binding = this. import ( binding, directive) ;
986986 this. legacy_import_macro ( ident. name , imported_binding, span, allow_shadowing) ;
987987 } ) ;
0 commit comments