@@ -1853,13 +1853,15 @@ impl<'a, 'tcx> TyLayout<'tcx> {
18531853 ty:: TyInt ( _) |
18541854 ty:: TyUint ( _) |
18551855 ty:: TyFloat ( _) |
1856- ty:: TyFnPtr ( _) |
1857- ty:: TyNever |
1858- ty:: TyFnDef ( ..) |
1859- ty:: TyDynamic ( ..) => {
1856+ ty:: TyFnPtr ( _) => {
18601857 bug ! ( "TyLayout::field_type({:?}): not applicable" , self )
18611858 }
18621859
1860+ // ZSTs.
1861+ ty:: TyNever |
1862+ ty:: TyFnDef ( ..) |
1863+ ty:: TyDynamic ( ..) => 0 ,
1864+
18631865 // Potentially-fat pointers.
18641866 ty:: TyRef ( ..) |
18651867 ty:: TyRawPtr ( _) => {
@@ -1883,14 +1885,13 @@ impl<'a, 'tcx> TyLayout<'tcx> {
18831885
18841886 // ADTs.
18851887 ty:: TyAdt ( def, _) => {
1886- let v = if def. is_enum ( ) {
1887- self . variant_index . expect ( "variant index required" )
1888- } else {
1889- assert_eq ! ( self . variant_index, None ) ;
1888+ let v = self . variant_index . unwrap_or ( 0 ) ;
1889+ if def. variants . is_empty ( ) {
1890+ assert_eq ! ( v, 0 ) ;
18901891 0
1891- } ;
1892-
1893- def . variants [ v ] . fields . len ( )
1892+ } else {
1893+ def . variants [ v ] . fields . len ( )
1894+ }
18941895 }
18951896
18961897 ty:: TyProjection ( _) | ty:: TyAnon ( ..) | ty:: TyParam ( _) |
@@ -1961,14 +1962,7 @@ impl<'a, 'tcx> TyLayout<'tcx> {
19611962
19621963 // ADTs.
19631964 ty:: TyAdt ( def, substs) => {
1964- let v = if def. is_enum ( ) {
1965- self . variant_index . expect ( "variant index required" )
1966- } else {
1967- assert_eq ! ( self . variant_index, None ) ;
1968- 0
1969- } ;
1970-
1971- def. variants [ v] . fields [ i] . ty ( tcx, substs)
1965+ def. variants [ self . variant_index . unwrap_or ( 0 ) ] . fields [ i] . ty ( tcx, substs)
19721966 }
19731967
19741968 ty:: TyProjection ( _) | ty:: TyAnon ( ..) | ty:: TyParam ( _) |
0 commit comments