@@ -3915,29 +3915,30 @@ fn resolveUnionInner(
3915
3915
pub fn getUnionLayout (loaded_union : InternPool.LoadedUnionType , zcu : * const Zcu ) Zcu.UnionLayout {
3916
3916
const ip = & zcu .intern_pool ;
3917
3917
assert (loaded_union .haveLayout (ip ));
3918
- var most_aligned_field : u32 = undefined ;
3919
- var most_aligned_field_size : u64 = undefined ;
3920
- var biggest_field : u32 = undefined ;
3918
+ var most_aligned_field : u32 = 0 ;
3919
+ var most_aligned_field_align : InternPool.Alignment = .@"1" ;
3920
+ var most_aligned_field_size : u64 = 0 ;
3921
+ var biggest_field : u32 = 0 ;
3921
3922
var payload_size : u64 = 0 ;
3922
3923
var payload_align : InternPool.Alignment = .@"1" ;
3923
- for (loaded_union .field_types .get (ip ), 0.. ) | field_ty , field_index | {
3924
- if (Type .fromInterned (field_ty ).isNoReturn (zcu )) continue ;
3924
+ for (loaded_union .field_types .get (ip ), 0.. ) | field_ty_ip_index , field_index | {
3925
+ const field_ty : Type = .fromInterned (field_ty_ip_index );
3926
+ if (field_ty .isNoReturn (zcu )) continue ;
3925
3927
3926
3928
const explicit_align = loaded_union .fieldAlign (ip , field_index );
3927
3929
const field_align = if (explicit_align != .none )
3928
3930
explicit_align
3929
3931
else
3930
- Type .fromInterned (field_ty ).abiAlignment (zcu );
3931
- if (Type .fromInterned (field_ty ).hasRuntimeBits (zcu )) {
3932
- const field_size = Type .fromInterned (field_ty ).abiSize (zcu );
3933
- if (field_size > payload_size ) {
3934
- payload_size = field_size ;
3935
- biggest_field = @intCast (field_index );
3936
- }
3937
- if (field_align .compare (.gte , payload_align )) {
3938
- most_aligned_field = @intCast (field_index );
3939
- most_aligned_field_size = field_size ;
3940
- }
3932
+ field_ty .abiAlignment (zcu );
3933
+ const field_size = field_ty .abiSize (zcu );
3934
+ if (field_size > payload_size ) {
3935
+ payload_size = field_size ;
3936
+ biggest_field = @intCast (field_index );
3937
+ }
3938
+ if (field_size > 0 and field_align .compare (.gte , most_aligned_field_align )) {
3939
+ most_aligned_field = @intCast (field_index );
3940
+ most_aligned_field_align = field_align ;
3941
+ most_aligned_field_size = field_size ;
3941
3942
}
3942
3943
payload_align = payload_align .max (field_align );
3943
3944
}
0 commit comments