aboutsummaryrefslogtreecommitdiff
path: root/src/type.zig
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2022-10-21 12:11:49 +0200
committerGitHub <noreply@github.com>2022-10-21 12:11:49 +0200
commit972c39e2c00c487a483bad002ef33ca1a5c21d02 (patch)
tree8a5ef4ae22f2a36b020062a913c79278bfb79a30 /src/type.zig
parent41575b1f55b0f18d65bfeb23dc04a5489ed47b65 (diff)
parent2609e33ab08850405682a79f60cca66c13f9a40d (diff)
downloadzig-972c39e2c00c487a483bad002ef33ca1a5c21d02.tar.gz
zig-972c39e2c00c487a483bad002ef33ca1a5c21d02.zip
Merge pull request #13219 from Vexu/stage2-fixes
Stage2 bug fixes
Diffstat (limited to 'src/type.zig')
-rw-r--r--src/type.zig9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/type.zig b/src/type.zig
index 62586e86ee..a2f0bb9e8f 100644
--- a/src/type.zig
+++ b/src/type.zig
@@ -3619,6 +3619,9 @@ pub const Type = extern union {
.@"struct" => {
if (sema_kit) |sk| _ = try sk.sema.resolveTypeFields(sk.block, sk.src, ty);
+ if (ty.containerLayout() != .Packed) {
+ return (try ty.abiSizeAdvanced(target, if (sema_kit) |sk| .{ .sema_kit = sk } else .eager)).scalar * 8;
+ }
var total: u64 = 0;
for (ty.structFields().values()) |field| {
total += try bitSizeAdvanced(field.ty, target, sema_kit);
@@ -3628,6 +3631,9 @@ pub const Type = extern union {
.tuple, .anon_struct => {
if (sema_kit) |sk| _ = try sk.sema.resolveTypeFields(sk.block, sk.src, ty);
+ if (ty.containerLayout() != .Packed) {
+ return (try ty.abiSizeAdvanced(target, if (sema_kit) |sk| .{ .sema_kit = sk } else .eager)).scalar * 8;
+ }
var total: u64 = 0;
for (ty.tupleFields().types) |field_ty| {
total += try bitSizeAdvanced(field_ty, target, sema_kit);
@@ -3643,6 +3649,9 @@ pub const Type = extern union {
.@"union", .union_safety_tagged, .union_tagged => {
if (sema_kit) |sk| _ = try sk.sema.resolveTypeFields(sk.block, sk.src, ty);
+ if (ty.containerLayout() != .Packed) {
+ return (try ty.abiSizeAdvanced(target, if (sema_kit) |sk| .{ .sema_kit = sk } else .eager)).scalar * 8;
+ }
const union_obj = ty.cast(Payload.Union).?.data;
assert(union_obj.haveFieldTypes());