diff options
Diffstat (limited to 'src/type.zig')
| -rw-r--r-- | src/type.zig | 14 |
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 => { |
