@@ -14,7 +14,7 @@ use rustc_hir as hir;
14
14
use rustc_hir:: def:: DefKind ;
15
15
use rustc_hir:: def_id:: LocalDefId ;
16
16
use rustc_hir:: lang_items:: LangItem ;
17
- use rustc_index:: vec:: IndexVec ;
17
+ use rustc_index:: vec:: { IndexSlice , IndexVec } ;
18
18
use rustc_infer:: infer:: canonical:: QueryRegionConstraints ;
19
19
use rustc_infer:: infer:: outlives:: env:: RegionBoundPairs ;
20
20
use rustc_infer:: infer:: region_constraints:: RegionConstraintData ;
@@ -1716,7 +1716,7 @@ impl<'a, 'tcx> TypeChecker<'a, 'tcx> {
1716
1716
fn aggregate_field_ty (
1717
1717
& mut self ,
1718
1718
ak : & AggregateKind < ' tcx > ,
1719
- field_index : usize ,
1719
+ field_index : FieldIdx ,
1720
1720
location : Location ,
1721
1721
) -> Result < Ty < ' tcx > , FieldAccessError > {
1722
1722
let tcx = self . tcx ( ) ;
@@ -1725,16 +1725,15 @@ impl<'a, 'tcx> TypeChecker<'a, 'tcx> {
1725
1725
AggregateKind :: Adt ( adt_did, variant_index, substs, _, active_field_index) => {
1726
1726
let def = tcx. adt_def ( adt_did) ;
1727
1727
let variant = & def. variant ( variant_index) ;
1728
- let adj_field_index =
1729
- FieldIdx :: from_usize ( active_field_index. unwrap_or ( field_index) ) ;
1728
+ let adj_field_index = active_field_index. unwrap_or ( field_index) ;
1730
1729
if let Some ( field) = variant. fields . get ( adj_field_index) {
1731
1730
Ok ( self . normalize ( field. ty ( tcx, substs) , location) )
1732
1731
} else {
1733
1732
Err ( FieldAccessError :: OutOfRange { field_count : variant. fields . len ( ) } )
1734
1733
}
1735
1734
}
1736
1735
AggregateKind :: Closure ( _, substs) => {
1737
- match substs. as_closure ( ) . upvar_tys ( ) . nth ( field_index) {
1736
+ match substs. as_closure ( ) . upvar_tys ( ) . nth ( field_index. as_usize ( ) ) {
1738
1737
Some ( ty) => Ok ( ty) ,
1739
1738
None => Err ( FieldAccessError :: OutOfRange {
1740
1739
field_count : substs. as_closure ( ) . upvar_tys ( ) . count ( ) ,
@@ -1745,7 +1744,7 @@ impl<'a, 'tcx> TypeChecker<'a, 'tcx> {
1745
1744
// It doesn't make sense to look at a field beyond the prefix;
1746
1745
// these require a variant index, and are not initialized in
1747
1746
// aggregate rvalues.
1748
- match substs. as_generator ( ) . prefix_tys ( ) . nth ( field_index) {
1747
+ match substs. as_generator ( ) . prefix_tys ( ) . nth ( field_index. as_usize ( ) ) {
1749
1748
Some ( ty) => Ok ( ty) ,
1750
1749
None => Err ( FieldAccessError :: OutOfRange {
1751
1750
field_count : substs. as_generator ( ) . prefix_tys ( ) . count ( ) ,
@@ -2350,7 +2349,7 @@ impl<'a, 'tcx> TypeChecker<'a, 'tcx> {
2350
2349
body : & Body < ' tcx > ,
2351
2350
rvalue : & Rvalue < ' tcx > ,
2352
2351
aggregate_kind : & AggregateKind < ' tcx > ,
2353
- operands : & [ Operand < ' tcx > ] ,
2352
+ operands : & IndexSlice < FieldIdx , Operand < ' tcx > > ,
2354
2353
location : Location ,
2355
2354
) {
2356
2355
let tcx = self . tcx ( ) ;
@@ -2362,16 +2361,16 @@ impl<'a, 'tcx> TypeChecker<'a, 'tcx> {
2362
2361
return ;
2363
2362
}
2364
2363
2365
- for ( i, operand) in operands. iter ( ) . enumerate ( ) {
2364
+ for ( i, operand) in operands. iter_enumerated ( ) {
2366
2365
let field_ty = match self . aggregate_field_ty ( aggregate_kind, i, location) {
2367
2366
Ok ( field_ty) => field_ty,
2368
2367
Err ( FieldAccessError :: OutOfRange { field_count } ) => {
2369
2368
span_mirbug ! (
2370
2369
self ,
2371
2370
rvalue,
2372
2371
"accessed field #{} but variant only has {}" ,
2373
- i,
2374
- field_count
2372
+ i. as_u32 ( ) ,
2373
+ field_count,
2375
2374
) ;
2376
2375
continue ;
2377
2376
}
0 commit comments