Use FieldIdx
in various things related to aggregates
Shrank `AggregateKind` by 8 bytes on x64, since the active field of a union is tracked as an `Option<FieldIdx>` instead of `Option<usize>`.
This commit is contained in:
parent
e2e598f5fb
commit
dc5a8c8881
@ -802,14 +802,15 @@ fn is_fat_ptr<'tcx>(fx: &FunctionCx<'_, '_, 'tcx>, ty: Ty<'tcx>) -> bool {
|
||||
if active_field_index.is_some() {
|
||||
assert_eq!(operands.len(), 1);
|
||||
}
|
||||
for (i, operand) in operands.iter().enumerate() {
|
||||
for (i, operand) in operands.iter_enumerated() {
|
||||
let operand = codegen_operand(fx, operand);
|
||||
let field_index = active_field_index.unwrap_or(i);
|
||||
let to = if let mir::AggregateKind::Array(_) = **kind {
|
||||
let index = fx.bcx.ins().iconst(fx.pointer_type, field_index as i64);
|
||||
let array_index = i64::from(field_index.as_u32());
|
||||
let index = fx.bcx.ins().iconst(fx.pointer_type, array_index);
|
||||
variant_dest.place_index(fx, index)
|
||||
} else {
|
||||
variant_dest.place_field(fx, FieldIdx::new(field_index))
|
||||
variant_dest.place_field(fx, field_index)
|
||||
};
|
||||
to.write_cvalue(fx, operand);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user