mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 06:13:07 +00:00
x86_64: add missing padding to global unions
This commit is contained in:
parent
e13aa915b2
commit
3f13987a76
@ -558,7 +558,7 @@ pub fn generateSymbol(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check if we should store the tag first.
|
// Check if we should store the tag first.
|
||||||
if (layout.tag_align >= layout.payload_align) {
|
if (layout.tag_size > 0 and layout.tag_align >= layout.payload_align) {
|
||||||
switch (try generateSymbol(bin_file, src_loc, .{
|
switch (try generateSymbol(bin_file, src_loc, .{
|
||||||
.ty = typed_value.ty.unionTagType(mod).?,
|
.ty = typed_value.ty.unionTagType(mod).?,
|
||||||
.val = un.tag.toValue(),
|
.val = un.tag.toValue(),
|
||||||
@ -589,7 +589,7 @@ pub fn generateSymbol(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (layout.tag_size > 0) {
|
if (layout.tag_size > 0 and layout.tag_align < layout.payload_align) {
|
||||||
switch (try generateSymbol(bin_file, src_loc, .{
|
switch (try generateSymbol(bin_file, src_loc, .{
|
||||||
.ty = union_ty.tag_ty,
|
.ty = union_ty.tag_ty,
|
||||||
.val = un.tag.toValue(),
|
.val = un.tag.toValue(),
|
||||||
@ -597,10 +597,10 @@ pub fn generateSymbol(
|
|||||||
.ok => {},
|
.ok => {},
|
||||||
.fail => |em| return Result{ .fail = em },
|
.fail => |em| return Result{ .fail = em },
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (layout.padding > 0) {
|
if (layout.padding > 0) {
|
||||||
try code.writer().writeByteNTimes(0, layout.padding);
|
try code.writer().writeByteNTimes(0, layout.padding);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
.memoized_call => unreachable,
|
.memoized_call => unreachable,
|
||||||
|
|||||||
@ -12,7 +12,6 @@ const A = union(enum) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
test "union that needs padding bytes inside an array" {
|
test "union that needs padding bytes inside an array" {
|
||||||
if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest;
|
|
||||||
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
|
if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest;
|
||||||
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
|
if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest;
|
||||||
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user