From ea54c9a375ef8f419694b39b9f14f181fa0b82ee Mon Sep 17 00:00:00 2001 From: Micah Switzer Date: Thu, 3 Nov 2022 19:56:23 -0400 Subject: [PATCH] Sema: resolve lazy align in zirReify for union fields Closes #13435 --- src/Sema.zig | 2 +- test/behavior.zig | 1 + test/behavior/bugs/13435.zig | 22 ++++++++++++++++++++++ 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 test/behavior/bugs/13435.zig diff --git a/src/Sema.zig b/src/Sema.zig index bd956d32bc..8bf0649cc2 100644 --- a/src/Sema.zig +++ b/src/Sema.zig @@ -18232,7 +18232,7 @@ fn zirReify(sema: *Sema, block: *Block, extended: Zir.Inst.Extended.InstData, in var buffer: Value.ToTypeBuffer = undefined; gop.value_ptr.* = .{ .ty = try field_type_val.toType(&buffer).copy(new_decl_arena_allocator), - .abi_align = @intCast(u32, alignment_val.toUnsignedInt(target)), + .abi_align = @intCast(u32, (try alignment_val.getUnsignedIntAdvanced(target, sema.kit(block, src))).?), }; } diff --git a/test/behavior.zig b/test/behavior.zig index 1112f1a661..a92a5fcbf0 100644 --- a/test/behavior.zig +++ b/test/behavior.zig @@ -111,6 +111,7 @@ test { _ = @import("behavior/bugs/13159.zig"); _ = @import("behavior/bugs/13171.zig"); _ = @import("behavior/bugs/13285.zig"); + _ = @import("behavior/bugs/13435.zig"); _ = @import("behavior/byteswap.zig"); _ = @import("behavior/byval_arg_var.zig"); _ = @import("behavior/call.zig"); diff --git a/test/behavior/bugs/13435.zig b/test/behavior/bugs/13435.zig new file mode 100644 index 0000000000..a23735f2f4 --- /dev/null +++ b/test/behavior/bugs/13435.zig @@ -0,0 +1,22 @@ +const std = @import("std"); + +fn CreateUnion(comptime T: type) type { + return @Type(.{ + .Union = .{ + .layout = .Auto, + .tag_type = null, + .fields = &[_]std.builtin.Type.UnionField{ + .{ + .name = "field", + .field_type = T, + .alignment = @alignOf(T), + }, + }, + .decls = &[_]std.builtin.Type.Declaration{}, + }, + }); +} + +test { + _ = CreateUnion(struct {}); +}