aboutsummaryrefslogtreecommitdiff
path: root/src/codegen/spirv.zig
diff options
context:
space:
mode:
authorRobin Voetter <robin@voetter.nl>2023-05-20 17:25:17 +0200
committerAli Chraghi <63465728+alichraghi@users.noreply.github.com>2023-05-20 08:48:38 -0700
commitd7ddaf64a2978d80814ac7f57e3db2d1c6a45c2e (patch)
treef323c9076d4cef92c48d25e23ba71f1a3d4c3a1b /src/codegen/spirv.zig
parentfedc9a19e7909694fac107c3da245e08616fd6e4 (diff)
downloadzig-d7ddaf64a2978d80814ac7f57e3db2d1c6a45c2e.tar.gz
zig-d7ddaf64a2978d80814ac7f57e3db2d1c6a45c2e.zip
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.
Diffstat (limited to 'src/codegen/spirv.zig')
-rw-r--r--src/codegen/spirv.zig10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/codegen/spirv.zig b/src/codegen/spirv.zig
index 1793e9fe18..644bb95cca 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) {