Auto merge of #109762 - scottmcm:variantdef-indexvec, r=WaffleLapkin
Update `ty::VariantDef` to use `IndexVec<FieldIdx, FieldDef>` And while doing the updates for that, also uses `FieldIdx` in `ProjectionKind::Field` and `TypeckResults::field_indices`. There's more places that could use it (like `rustc_const_eval` and `LayoutS`), but I tried to keep this PR from exploding to *even more* places. Part 2/? of https://github.com/rust-lang/compiler-team/issues/606
This commit is contained in:
commit
eb3e9c1f45
47 changed files with 127 additions and 104 deletions
|
@ -320,7 +320,7 @@ fn layout_of_uncached<'tcx>(
|
|||
}
|
||||
|
||||
// Type of the first ADT field:
|
||||
let f0_ty = def.non_enum_variant().fields[0].ty(tcx, substs);
|
||||
let f0_ty = def.non_enum_variant().fields[FieldIdx::from_u32(0)].ty(tcx, substs);
|
||||
|
||||
// Heterogeneous SIMD vectors are not supported:
|
||||
// (should be caught by typeck)
|
||||
|
@ -456,7 +456,8 @@ fn layout_of_uncached<'tcx>(
|
|||
{
|
||||
let param_env = tcx.param_env(def.did());
|
||||
def.is_struct()
|
||||
&& match def.variants().iter().next().and_then(|x| x.fields.last()) {
|
||||
&& match def.variants().iter().next().and_then(|x| x.fields.raw.last())
|
||||
{
|
||||
Some(last_field) => tcx
|
||||
.type_of(last_field.did)
|
||||
.subst_identity()
|
||||
|
|
|
@ -107,7 +107,7 @@ fn adt_sized_constraint(tcx: TyCtxt<'_>, def_id: DefId) -> &[Ty<'_>] {
|
|||
let result = tcx.mk_type_list_from_iter(
|
||||
def.variants()
|
||||
.iter()
|
||||
.flat_map(|v| v.fields.last())
|
||||
.filter_map(|v| v.fields.raw.last())
|
||||
.flat_map(|f| sized_constraint_for_ty(tcx, def, tcx.type_of(f.did).subst_identity())),
|
||||
);
|
||||
|
||||
|
@ -542,7 +542,7 @@ fn unsizing_params_for_adt<'tcx>(tcx: TyCtxt<'tcx>, def_id: DefId) -> BitSet<u32
|
|||
|
||||
// The last field of the structure has to exist and contain type/const parameters.
|
||||
let Some((tail_field, prefix_fields)) =
|
||||
def.non_enum_variant().fields.split_last() else
|
||||
def.non_enum_variant().fields.raw.split_last() else
|
||||
{
|
||||
return BitSet::new_empty(num_params);
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue