@@ -582,31 +582,22 @@ impl<'a> Resolver<'a> {
582582 vis : ty:: Visibility ,
583583 expansion : Mark ) {
584584 let ident = variant. node . ident ;
585- let def_id = self . definitions . local_def_id ( variant. node . id ) ;
586585
587586 // Define a name in the type namespace.
587+ let def_id = self . definitions . local_def_id ( variant. node . id ) ;
588588 let def = Def :: Variant ( def_id) ;
589589 self . define ( parent, ident, TypeNS , ( def, vis, variant. span , expansion) ) ;
590590
591591 // Define a constructor name in the value namespace.
592592 // Braced variants, unlike structs, generate unusable names in
593593 // value namespace, they are reserved for possible future use.
594- if let Some ( ctor_node_id) = variant. node . data . ctor_id ( ) {
595- let ctor_def_id = self . definitions . local_def_id ( ctor_node_id) ;
596- let ctor_kind = CtorKind :: from_ast ( & variant. node . data ) ;
597- let ctor_def = Def :: Ctor ( hir:: CtorOf :: Variant , ctor_def_id, ctor_kind) ;
598-
599- self . define ( parent, ident, ValueNS , ( ctor_def, vis, variant. span , expansion) ) ;
600- } else {
601- // We normally don't have a `Def::Ctor(hir::CtorOf::Variant, ..)` for
602- // `Struct`-variants, but we must define one for name resolution to succeed. This also
603- // takes place in `build_reduced_graph_for_external_crate_def`.
604- let def_id = self . definitions . local_def_id ( variant. node . id ) ;
605- let ctor_kind = CtorKind :: from_ast ( & variant. node . data ) ;
606- let ctor_def = Def :: Ctor ( hir:: CtorOf :: Variant , def_id, ctor_kind) ;
607-
608- self . define ( parent, ident, ValueNS , ( ctor_def, vis, variant. span , expansion) ) ;
609- }
594+ // It's ok to use the variant's id as a ctor id since an
595+ // error will be reported on any use of such resolution anyway.
596+ let ctor_node_id = variant. node . data . ctor_id ( ) . unwrap_or ( variant. node . id ) ;
597+ let ctor_def_id = self . definitions . local_def_id ( ctor_node_id) ;
598+ let ctor_kind = CtorKind :: from_ast ( & variant. node . data ) ;
599+ let ctor_def = Def :: Ctor ( hir:: CtorOf :: Variant , ctor_def_id, ctor_kind) ;
600+ self . define ( parent, ident, ValueNS , ( ctor_def, vis, variant. span , expansion) ) ;
610601 }
611602
612603 /// Constructs the reduced graph for one foreign item.
@@ -658,27 +649,13 @@ impl<'a> Resolver<'a> {
658649 span) ;
659650 self . define ( parent, ident, TypeNS , ( module, vis, DUMMY_SP , expansion) ) ;
660651 }
661- Def :: Variant ( def_id) => {
652+ Def :: Variant ( ..) | Def :: TyAlias ( ..) | Def :: ForeignTy ( ..) | Def :: Existential ( ..) |
653+ Def :: TraitAlias ( ..) | Def :: PrimTy ( ..) | Def :: ToolMod => {
662654 self . define ( parent, ident, TypeNS , ( def, vis, DUMMY_SP , expansion) ) ;
663-
664- if hir:: def:: CtorKind :: Fictive == self . cstore . ctor_kind_untracked ( def_id) {
665- // We do not normally generate `Def::Ctor(hir::CtorOf::Variant, ..)` for
666- // `Struct`-variants. Therefore, `build_reduced_graph_for_external_crate_def`
667- // will not be called to define one. However, name resolution currently expects
668- // there to be one, so we generate one here. This is easy to solve for local
669- // code, see `build_reduced_graph_for_variant` for this case.
670- let ctor_def = Def :: Ctor ( hir:: CtorOf :: Variant , def_id,
671- hir:: def:: CtorKind :: Fictive ) ;
672-
673- let _ = self . try_define (
674- parent, ident, ValueNS ,
675- ( ctor_def, vis, DUMMY_SP , expansion) . to_name_binding ( self . arenas ) ,
676- ) ;
677- }
678655 }
679- Def :: TyAlias ( ..) | Def :: ForeignTy ( ..) | Def :: Existential ( .. ) | Def :: TraitAlias ( ..) |
680- Def :: PrimTy ( ..) | Def :: ToolMod => {
681- self . define ( parent, ident, TypeNS , ( def, vis, DUMMY_SP , expansion) ) ;
656+ Def :: Fn ( ..) | Def :: Static ( ..) | Def :: Const ( ..) |
657+ Def :: Ctor ( hir :: CtorOf :: Variant , ..) => {
658+ self . define ( parent, ident, ValueNS , ( def, vis, DUMMY_SP , expansion) ) ;
682659 }
683660 Def :: Ctor ( hir:: CtorOf :: Struct , def_id, ..) => {
684661 self . define ( parent, ident, ValueNS , ( def, vis, DUMMY_SP , expansion) ) ;
@@ -689,15 +666,6 @@ impl<'a> Resolver<'a> {
689666 self . struct_constructors . insert ( struct_def_id, ( def, vis) ) ;
690667 }
691668 }
692- Def :: Ctor ( hir:: CtorOf :: Variant , ..) => {
693- let _ = self . try_define (
694- parent, ident, ValueNS ,
695- ( def, vis, DUMMY_SP , expansion) . to_name_binding ( self . arenas ) ,
696- ) ;
697- }
698- Def :: Fn ( ..) | Def :: Static ( ..) | Def :: Const ( ..) => {
699- self . define ( parent, ident, ValueNS , ( def, vis, DUMMY_SP , expansion) ) ;
700- }
701669 Def :: Trait ( def_id) => {
702670 let module_kind = ModuleKind :: Def ( def, ident. name ) ;
703671 let module = self . new_module ( parent,
0 commit comments