Skip to content

Commit dc5a8c8

Browse files
committed
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>`.
1 parent e2e598f commit dc5a8c8

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

src/base.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -802,14 +802,15 @@ fn codegen_stmt<'tcx>(
802802
if active_field_index.is_some() {
803803
assert_eq!(operands.len(), 1);
804804
}
805-
for (i, operand) in operands.iter().enumerate() {
805+
for (i, operand) in operands.iter_enumerated() {
806806
let operand = codegen_operand(fx, operand);
807807
let field_index = active_field_index.unwrap_or(i);
808808
let to = if let mir::AggregateKind::Array(_) = **kind {
809-
let index = fx.bcx.ins().iconst(fx.pointer_type, field_index as i64);
809+
let array_index = i64::from(field_index.as_u32());
810+
let index = fx.bcx.ins().iconst(fx.pointer_type, array_index);
810811
variant_dest.place_index(fx, index)
811812
} else {
812-
variant_dest.place_field(fx, FieldIdx::new(field_index))
813+
variant_dest.place_field(fx, field_index)
813814
};
814815
to.write_cvalue(fx, operand);
815816
}

0 commit comments

Comments
 (0)