stage2: implement union member access as enum tag

This commit is contained in:
Andrew Kelley
2021-10-18 17:16:43 -07:00
parent 6329f4e47a
commit e4c437f23b
2 changed files with 65 additions and 39 deletions

View File

@@ -1261,6 +1261,10 @@ pub const DeclGen = struct {
}
const field_ty = tv.ty.unionFieldType(tag_and_val.tag);
const payload = p: {
if (!field_ty.hasCodeGenBits()) {
const padding_len = @intCast(c_uint, layout.payload_size);
break :p self.context.intType(8).arrayType(padding_len).getUndef();
}
const field = try genTypedValue(self, .{ .ty = field_ty, .val = tag_and_val.val });
const field_size = field_ty.abiSize(target);
if (field_size == layout.payload_size) {