From c467f6693eb815906088b15f25d4e21092526bb4 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 7 Mar 2022 13:36:58 -0700 Subject: stage2: fix union layout returning non-zero for zero-sized tag --- src/Module.zig | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/Module.zig') diff --git a/src/Module.zig b/src/Module.zig index 33d5bb4c4c..0bcdc85c98 100644 --- a/src/Module.zig +++ b/src/Module.zig @@ -1278,7 +1278,8 @@ pub const Union = struct { var biggest_field: u32 = undefined; var payload_size: u64 = 0; var payload_align: u32 = 0; - for (u.fields.values()) |field, i| { + const fields = u.fields.values(); + for (fields) |field, i| { if (!field.ty.hasRuntimeBits()) continue; const field_align = a: { @@ -1300,7 +1301,7 @@ pub const Union = struct { } } payload_align = @maximum(payload_align, 1); - if (!have_tag) return .{ + if (!have_tag or fields.len <= 1) return .{ .abi_size = std.mem.alignForwardGeneric(u64, payload_size, payload_align), .abi_align = payload_align, .most_aligned_field = most_aligned_field, -- cgit v1.2.3