From d7ddaf64a2978d80814ac7f57e3db2d1c6a45c2e Mon Sep 17 00:00:00 2001 From: Robin Voetter Date: Sat, 20 May 2023 17:25:17 +0200 Subject: [PATCH] spirv: don't generate union tag type if it doesnt exist Previously the tag type was generated even if it was nonexistant, triggering an assertion that an integer type should never have zero bits. Now its only generated when the tag type is actually emitted. --- src/codegen/spirv.zig | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/codegen/spirv.zig b/src/codegen/spirv.zig index 1793e9fe18d9caece7f4420733052205f3096aae..644bb95cca1184894b372ad5e6ae3e7ef5b10e75 100644 --- a/src/codegen/spirv.zig +++ b/src/codegen/spirv.zig @@ -1116,21 +1116,20 @@ pub const DeclGen = struct { return self.todo("packed union types", .{}); } - const tag_ty_ref = try self.resolveType(union_ty.tag_ty, .indirect); if (layout.payload_size == 0) { // No payload, so represent this as just the tag type. - return tag_ty_ref; + return try self.resolveType(union_ty.tag_ty, .indirect); } var members = std.BoundedArray(SpvType.Payload.Struct.Member, 4){}; const has_tag = layout.tag_size != 0; const tag_first = layout.tag_align >= layout.payload_align; - const tag_member = .{ .name = "tag", .ty = tag_ty_ref }; const u8_ty_ref = try self.intType(.unsigned, 8); // TODO: What if Int8Type is not enabled? if (has_tag and tag_first) { - members.appendAssumeCapacity(tag_member); + const tag_ty_ref = try self.resolveType(union_ty.tag_ty, .indirect); + members.appendAssumeCapacity(.{ .name = "tag", .ty = tag_ty_ref }); } const active_field = maybe_active_field orelse layout.most_aligned_field; @@ -1149,7 +1148,8 @@ pub const DeclGen = struct { } if (has_tag and !tag_first) { - members.appendAssumeCapacity(tag_member); + const tag_ty_ref = try self.resolveType(union_ty.tag_ty, .indirect); + members.appendAssumeCapacity(.{ .name = "tag", .ty = tag_ty_ref }); } if (layout.padding != 0) { -- 2.54.0