aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2022-03-07 13:36:58 -0700
committerAndrew Kelley <andrew@ziglang.org>2022-03-07 13:36:58 -0700
commitc467f6693eb815906088b15f25d4e21092526bb4 (patch)
tree8519239a6cd49beb87e7245b039c84a62fac0257 /src
parentf59cbd89e349fb3002500cb2a1d69ca5e6063338 (diff)
downloadzig-c467f6693eb815906088b15f25d4e21092526bb4.tar.gz
zig-c467f6693eb815906088b15f25d4e21092526bb4.zip
stage2: fix union layout returning non-zero for zero-sized tag
Diffstat (limited to 'src')
-rw-r--r--src/Module.zig5
1 files changed, 3 insertions, 2 deletions
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,