@@ -1869,6 +1869,11 @@ impl<'a, 'gcx, 'tcx> VariantDef {
1869
1869
if adt_kind == AdtKind :: Struct && tcx. has_attr ( parent_did, "non_exhaustive" ) {
1870
1870
debug ! ( "found non-exhaustive field list for {:?}" , parent_did) ;
1871
1871
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
+ }
1872
1877
}
1873
1878
1874
1879
VariantDef {
@@ -2146,6 +2151,7 @@ impl<'a, 'gcx, 'tcx> AdtDef {
2146
2151
debug ! ( "found non-exhaustive variant list for {:?}" , did) ;
2147
2152
flags = flags | AdtFlags :: IS_VARIANT_LIST_NON_EXHAUSTIVE ;
2148
2153
}
2154
+
2149
2155
flags |= match kind {
2150
2156
AdtKind :: Enum => AdtFlags :: IS_ENUM ,
2151
2157
AdtKind :: Union => AdtFlags :: IS_UNION ,
@@ -2299,21 +2305,25 @@ impl<'a, 'gcx, 'tcx> AdtDef {
2299
2305
self . variants . iter ( ) . all ( |v| v. fields . is_empty ( ) )
2300
2306
}
2301
2307
2308
+ /// Return a `VariantDef` given a variant id.
2302
2309
pub fn variant_with_id ( & self , vid : DefId ) -> & VariantDef {
2303
2310
self . variants . iter ( ) . find ( |v| v. def_id == vid)
2304
2311
. expect ( "variant_with_id: unknown variant" )
2305
2312
}
2306
2313
2314
+ /// Return a `VariantDef` given a constructor id.
2307
2315
pub fn variant_with_ctor_id ( & self , cid : DefId ) -> & VariantDef {
2308
2316
self . variants . iter ( ) . find ( |v| v. ctor_def_id == Some ( cid) )
2309
2317
. expect ( "variant_with_ctor_id: unknown variant" )
2310
2318
}
2311
2319
2320
+ /// Return the index of `VariantDef` given a variant id.
2312
2321
pub fn variant_index_with_id ( & self , vid : DefId ) -> VariantIdx {
2313
2322
self . variants . iter_enumerated ( ) . find ( |( _, v) | v. def_id == vid)
2314
2323
. expect ( "variant_index_with_id: unknown variant" ) . 0
2315
2324
}
2316
2325
2326
+ /// Return the index of `VariantDef` given a constructor id.
2317
2327
pub fn variant_index_with_ctor_id ( & self , cid : DefId ) -> VariantIdx {
2318
2328
self . variants . iter_enumerated ( ) . find ( |( _, v) | v. ctor_def_id == Some ( cid) )
2319
2329
. expect ( "variant_index_with_ctor_id: unknown variant" ) . 0
@@ -2930,8 +2940,8 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
2930
2940
}
2931
2941
}
2932
2942
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.
2935
2945
pub fn expect_variant_def ( self , def : Def ) -> & ' tcx VariantDef {
2936
2946
match def {
2937
2947
Def :: Variant ( did) => {
0 commit comments