| ... | @@ -3619,6 +3619,9 @@ pub const Type = extern union { | ... | @@ -3619,6 +3619,9 @@ pub const Type = extern union { |
| 3619 | | 3619 | |
| 3620 | .@"struct" => { | 3620 | .@"struct" => { |
| 3621 | if (sema_kit) |sk| _ = try sk.sema.resolveTypeFields(sk.block, sk.src, ty); | 3621 | if (sema_kit) |sk| _ = try sk.sema.resolveTypeFields(sk.block, sk.src, ty); |
| | 3622 | if (ty.containerLayout() != .Packed) { |
| | 3623 | return (try ty.abiSizeAdvanced(target, if (sema_kit) |sk| .{ .sema_kit = sk } else .eager)).scalar * 8; |
| | 3624 | } |
| 3622 | var total: u64 = 0; | 3625 | var total: u64 = 0; |
| 3623 | for (ty.structFields().values()) |field| { | 3626 | for (ty.structFields().values()) |field| { |
| 3624 | total += try bitSizeAdvanced(field.ty, target, sema_kit); | 3627 | total += try bitSizeAdvanced(field.ty, target, sema_kit); |
| ... | @@ -3628,6 +3631,9 @@ pub const Type = extern union { | ... | @@ -3628,6 +3631,9 @@ pub const Type = extern union { |
| 3628 | | 3631 | |
| 3629 | .tuple, .anon_struct => { | 3632 | .tuple, .anon_struct => { |
| 3630 | if (sema_kit) |sk| _ = try sk.sema.resolveTypeFields(sk.block, sk.src, ty); | 3633 | if (sema_kit) |sk| _ = try sk.sema.resolveTypeFields(sk.block, sk.src, ty); |
| | 3634 | if (ty.containerLayout() != .Packed) { |
| | 3635 | return (try ty.abiSizeAdvanced(target, if (sema_kit) |sk| .{ .sema_kit = sk } else .eager)).scalar * 8; |
| | 3636 | } |
| 3631 | var total: u64 = 0; | 3637 | var total: u64 = 0; |
| 3632 | for (ty.tupleFields().types) |field_ty| { | 3638 | for (ty.tupleFields().types) |field_ty| { |
| 3633 | total += try bitSizeAdvanced(field_ty, target, sema_kit); | 3639 | total += try bitSizeAdvanced(field_ty, target, sema_kit); |
| ... | @@ -3643,6 +3649,9 @@ pub const Type = extern union { | ... | @@ -3643,6 +3649,9 @@ pub const Type = extern union { |
| 3643 | | 3649 | |
| 3644 | .@"union", .union_safety_tagged, .union_tagged => { | 3650 | .@"union", .union_safety_tagged, .union_tagged => { |
| 3645 | if (sema_kit) |sk| _ = try sk.sema.resolveTypeFields(sk.block, sk.src, ty); | 3651 | if (sema_kit) |sk| _ = try sk.sema.resolveTypeFields(sk.block, sk.src, ty); |
| | 3652 | if (ty.containerLayout() != .Packed) { |
| | 3653 | return (try ty.abiSizeAdvanced(target, if (sema_kit) |sk| .{ .sema_kit = sk } else .eager)).scalar * 8; |
| | 3654 | } |
| 3646 | const union_obj = ty.cast(Payload.Union).?.data; | 3655 | const union_obj = ty.cast(Payload.Union).?.data; |
| 3647 | assert(union_obj.haveFieldTypes()); | 3656 | assert(union_obj.haveFieldTypes()); |
| 3648 | | 3657 | |