@@ -1869,6 +1869,11 @@ impl<'a, 'gcx, 'tcx> VariantDef {
18691869 if adt_kind == AdtKind :: Struct && tcx. has_attr ( parent_did, "non_exhaustive" ) {
18701870 debug ! ( "found non-exhaustive field list for {:?}" , parent_did) ;
18711871 flags = flags | VariantFlags :: IS_FIELD_LIST_NON_EXHAUSTIVE ;
1872+ } else if let Some ( variant_did) = variant_did {
1873+ if tcx. has_attr ( variant_did, "non_exhaustive" ) {
1874+ debug ! ( "found non-exhaustive field list for {:?}" , variant_did) ;
1875+ flags = flags | VariantFlags :: IS_FIELD_LIST_NON_EXHAUSTIVE ;
1876+ }
18721877 }
18731878
18741879 VariantDef {
@@ -2146,6 +2151,7 @@ impl<'a, 'gcx, 'tcx> AdtDef {
21462151 debug ! ( "found non-exhaustive variant list for {:?}" , did) ;
21472152 flags = flags | AdtFlags :: IS_VARIANT_LIST_NON_EXHAUSTIVE ;
21482153 }
2154+
21492155 flags |= match kind {
21502156 AdtKind :: Enum => AdtFlags :: IS_ENUM ,
21512157 AdtKind :: Union => AdtFlags :: IS_UNION ,
@@ -2299,21 +2305,25 @@ impl<'a, 'gcx, 'tcx> AdtDef {
22992305 self . variants . iter ( ) . all ( |v| v. fields . is_empty ( ) )
23002306 }
23012307
2308+ /// Return a `VariantDef` given a variant id.
23022309 pub fn variant_with_id ( & self , vid : DefId ) -> & VariantDef {
23032310 self . variants . iter ( ) . find ( |v| v. def_id == vid)
23042311 . expect ( "variant_with_id: unknown variant" )
23052312 }
23062313
2314+ /// Return a `VariantDef` given a constructor id.
23072315 pub fn variant_with_ctor_id ( & self , cid : DefId ) -> & VariantDef {
23082316 self . variants . iter ( ) . find ( |v| v. ctor_def_id == Some ( cid) )
23092317 . expect ( "variant_with_ctor_id: unknown variant" )
23102318 }
23112319
2320+ /// Return the index of `VariantDef` given a variant id.
23122321 pub fn variant_index_with_id ( & self , vid : DefId ) -> VariantIdx {
23132322 self . variants . iter_enumerated ( ) . find ( |( _, v) | v. def_id == vid)
23142323 . expect ( "variant_index_with_id: unknown variant" ) . 0
23152324 }
23162325
2326+ /// Return the index of `VariantDef` given a constructor id.
23172327 pub fn variant_index_with_ctor_id ( & self , cid : DefId ) -> VariantIdx {
23182328 self . variants . iter_enumerated ( ) . find ( |( _, v) | v. ctor_def_id == Some ( cid) )
23192329 . expect ( "variant_index_with_ctor_id: unknown variant" ) . 0
@@ -2930,8 +2940,8 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
29302940 }
29312941 }
29322942
2933- // Returns `ty::VariantDef` if `def` refers to a struct,
2934- // or variant or their constructors, panics otherwise.
2943+ /// Returns `ty::VariantDef` if `def` refers to a struct,
2944+ /// or variant or their constructors, panics otherwise.
29352945 pub fn expect_variant_def ( self , def : Def ) -> & ' tcx VariantDef {
29362946 match def {
29372947 Def :: Variant ( did) => {
0 commit comments