diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2022-03-07 13:36:58 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2022-03-07 13:36:58 -0700 |
| commit | c467f6693eb815906088b15f25d4e21092526bb4 (patch) | |
| tree | 8519239a6cd49beb87e7245b039c84a62fac0257 /src/Module.zig | |
| parent | f59cbd89e349fb3002500cb2a1d69ca5e6063338 (diff) | |
| download | zig-c467f6693eb815906088b15f25d4e21092526bb4.tar.gz zig-c467f6693eb815906088b15f25d4e21092526bb4.zip | |
stage2: fix union layout returning non-zero for zero-sized tag
Diffstat (limited to 'src/Module.zig')
| -rw-r--r-- | src/Module.zig | 5 |
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, |
