@@ -868,6 +868,7 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
868868 // This is only a guess, two equivalent idents may incorrectly get different gensyms here.
869869 let ident = ident. gensym_if_underscore ( ) ;
870870 let expansion = ExpnId :: root ( ) ; // FIXME(jseyfried) intercrate hygiene
871+ // Record primary definitions.
871872 match res {
872873 Res :: Def ( kind @ DefKind :: Mod , def_id)
873874 | Res :: Def ( kind @ DefKind :: Enum , def_id)
@@ -879,51 +880,50 @@ impl<'a, 'b> BuildReducedGraphVisitor<'a, 'b> {
879880 span) ;
880881 self . r . define ( parent, ident, TypeNS , ( module, vis, DUMMY_SP , expansion) ) ;
881882 }
882- Res :: Def ( DefKind :: Variant , _)
883+ Res :: Def ( DefKind :: Struct , _)
884+ | Res :: Def ( DefKind :: Union , _)
885+ | Res :: Def ( DefKind :: Variant , _)
883886 | Res :: Def ( DefKind :: TyAlias , _)
884887 | Res :: Def ( DefKind :: ForeignTy , _)
885888 | Res :: Def ( DefKind :: OpaqueTy , _)
886889 | Res :: Def ( DefKind :: TraitAlias , _)
887890 | Res :: Def ( DefKind :: AssocTy , _)
888891 | Res :: Def ( DefKind :: AssocOpaqueTy , _)
889892 | Res :: PrimTy ( ..)
890- | Res :: ToolMod => {
891- self . r . define ( parent, ident, TypeNS , ( res, vis, DUMMY_SP , expansion) ) ;
892- }
893+ | Res :: ToolMod =>
894+ self . r . define ( parent, ident, TypeNS , ( res, vis, DUMMY_SP , expansion) ) ,
893895 Res :: Def ( DefKind :: Fn , _)
896+ | Res :: Def ( DefKind :: Method , _)
894897 | Res :: Def ( DefKind :: Static , _)
895898 | Res :: Def ( DefKind :: Const , _)
896899 | Res :: Def ( DefKind :: AssocConst , _)
897- | Res :: Def ( DefKind :: Ctor ( CtorOf :: Variant , ..) , _) => {
898- self . r . define ( parent, ident, ValueNS , ( res, vis, DUMMY_SP , expansion) ) ;
899- }
900- Res :: Def ( DefKind :: Ctor ( CtorOf :: Struct , ..) , def_id) => {
901- self . r . define ( parent, ident, ValueNS , ( res, vis, DUMMY_SP , expansion) ) ;
902-
903- if let Some ( struct_def_id) =
904- self . r . cstore . def_key ( def_id) . parent
905- . map ( |index| DefId { krate : def_id. krate , index : index } ) {
906- self . r . struct_constructors . insert ( struct_def_id, ( res, vis) ) ;
907- }
900+ | Res :: Def ( DefKind :: Ctor ( ..) , _) =>
901+ self . r . define ( parent, ident, ValueNS , ( res, vis, DUMMY_SP , expansion) ) ,
902+ Res :: Def ( DefKind :: Macro ( ..) , _)
903+ | Res :: NonMacroAttr ( ..) =>
904+ self . r . define ( parent, ident, MacroNS , ( res, vis, DUMMY_SP , expansion) ) ,
905+ Res :: Def ( DefKind :: TyParam , _) | Res :: Def ( DefKind :: ConstParam , _)
906+ | Res :: Local ( ..) | Res :: SelfTy ( ..) | Res :: SelfCtor ( ..) | Res :: Err =>
907+ bug ! ( "unexpected resolution: {:?}" , res)
908+ }
909+ // Record some extra data for better diagnostics.
910+ match res {
911+ Res :: Def ( DefKind :: Struct , def_id) | Res :: Def ( DefKind :: Union , def_id) => {
912+ let field_names = self . r . cstore . struct_field_names_untracked ( def_id) ;
913+ self . insert_field_names ( def_id, field_names) ;
908914 }
909915 Res :: Def ( DefKind :: Method , def_id) => {
910- self . r . define ( parent, ident, ValueNS , ( res, vis, DUMMY_SP , expansion) ) ;
911-
912916 if self . r . cstore . associated_item_cloned_untracked ( def_id) . method_has_self_argument {
913917 self . r . has_self . insert ( def_id) ;
914918 }
915919 }
916- Res :: Def ( DefKind :: Struct , def_id) | Res :: Def ( DefKind :: Union , def_id) => {
917- self . r . define ( parent, ident, TypeNS , ( res, vis, DUMMY_SP , expansion) ) ;
918-
919- // Record field names for error reporting.
920- let field_names = self . r . cstore . struct_field_names_untracked ( def_id) ;
921- self . insert_field_names ( def_id, field_names) ;
922- }
923- Res :: Def ( DefKind :: Macro ( ..) , _) | Res :: NonMacroAttr ( ..) => {
924- self . r . define ( parent, ident, MacroNS , ( res, vis, DUMMY_SP , expansion) ) ;
920+ Res :: Def ( DefKind :: Ctor ( CtorOf :: Struct , ..) , def_id) => {
921+ let parent = self . r . cstore . def_key ( def_id) . parent ;
922+ if let Some ( struct_def_id) = parent. map ( |index| DefId { index, ..def_id } ) {
923+ self . r . struct_constructors . insert ( struct_def_id, ( res, vis) ) ;
924+ }
925925 }
926- _ => bug ! ( "unexpected resolution: {:?}" , res )
926+ _ => { }
927927 }
928928 }
929929
0 commit comments