aboutsummaryrefslogtreecommitdiff
path: root/src/type.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/type.zig')
-rw-r--r--src/type.zig14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/type.zig b/src/type.zig
index d5b8e6f5b3..6b7214888d 100644
--- a/src/type.zig
+++ b/src/type.zig
@@ -3251,8 +3251,20 @@ pub const Type = extern union {
const int_tag_ty = ty.intTagType(&buffer);
return int_tag_ty.bitSize(target);
},
+
.@"union", .union_tagged => {
- @panic("TODO bitSize unions");
+ const union_obj = ty.cast(Payload.Union).?.data;
+
+ const fields = union_obj.fields;
+ if (fields.count() == 0) return 0;
+
+ assert(union_obj.haveFieldTypes());
+
+ var size: u64 = 0;
+ for (fields.values()) |field| {
+ size = @maximum(size, field.ty.bitSize(target));
+ }
+ return size;
},
.vector => {