mirror of
https://codeberg.org/ziglang/zig.git
synced 2025-12-06 05:44:20 +00:00
disallow alignment on packed union fields
This commit is contained in:
parent
5678a600ff
commit
e82d67233b
5 changed files with 16 additions and 12 deletions
|
|
@ -5386,6 +5386,9 @@ fn unionDeclInner(
|
|||
return astgen.failNode(member_node, "union field missing type", .{});
|
||||
}
|
||||
if (member.ast.align_expr.unwrap()) |align_expr| {
|
||||
if (layout == .@"packed") {
|
||||
return astgen.failNode(align_expr, "unable to override alignment of packed union fields", .{});
|
||||
}
|
||||
const align_inst = try expr(&block_scope, &block_scope.base, coerced_align_ri, align_expr);
|
||||
wip_members.appendToField(@intFromEnum(align_inst));
|
||||
any_aligned_fields = true;
|
||||
|
|
|
|||
|
|
@ -433,8 +433,8 @@ test "Type.Union" {
|
|||
.layout = .@"packed",
|
||||
.tag_type = null,
|
||||
.fields = &.{
|
||||
.{ .name = "signed", .type = i32, .alignment = @alignOf(i32) },
|
||||
.{ .name = "unsigned", .type = u32, .alignment = @alignOf(u32) },
|
||||
.{ .name = "signed", .type = i32, .alignment = 0 },
|
||||
.{ .name = "unsigned", .type = u32, .alignment = 0 },
|
||||
},
|
||||
.decls = &.{},
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,9 +0,0 @@
|
|||
export fn entry() void {
|
||||
_ = @Type(.{ .@"struct" = .{ .layout = .@"packed", .fields = &.{
|
||||
.{ .name = "one", .type = u4, .default_value_ptr = null, .is_comptime = false, .alignment = 2 },
|
||||
}, .decls = &.{}, .is_tuple = false } });
|
||||
}
|
||||
|
||||
// error
|
||||
//
|
||||
// :2:9: error: alignment in a packed struct field must be set to 0
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
const U = packed union {
|
||||
x: f32,
|
||||
y: u8 align(10),
|
||||
z: u32,
|
||||
};
|
||||
|
||||
// error
|
||||
//
|
||||
// :3:17: error: unable to override alignment of packed union fields
|
||||
|
|
@ -75,4 +75,5 @@ comptime {
|
|||
// :16:5: error: tuple field name '3' does not match field index 0
|
||||
// :30:5: error: comptime field without default initialization value
|
||||
// :44:5: error: extern struct fields cannot be marked comptime
|
||||
// :58:5: error: alignment in a packed struct field must be set to 0
|
||||
// :58:5: error: alignment of a packed struct field must be set to 0
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue