Commit e82d67233b
Changed files (5)
lib
std
zig
test
lib/std/zig/AstGen.zig
@@ -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;
test/behavior/type.zig
@@ -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 = &.{},
},
test/cases/compile_errors/packed_union_alignment_override.zig
@@ -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
test/cases/compile_errors/reify_struct.zig
@@ -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
+