From a7b3082ba0d07c66d2ec19304ffe993d77f714b7 Mon Sep 17 00:00:00 2001 From: John Schmidt Date: Sat, 12 Feb 2022 16:57:52 +0100 Subject: Implement `type.bitSize` for unions --- src/type.zig | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'src/type.zig') 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 => { -- cgit v1.2.3