zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 32d755beb8d83a666100ca9455df51b93caff1fc (tree)
parent 2eb09092065715642e93d9cfd54196840a314bc0
Author: Julian <58199799+mov-rax@users.noreply.github.com>
Date:   Mon,  3 Oct 2022 05:05:12 -0500

Sema: require reified packed struct fields to have zero alignment


Diffstat:
Msrc/Sema.zig | 4++++
Atest/cases/compile_errors/packed_struct_field_alignment_unavailable_for_reify_type.zig | 11+++++++++++
2 files changed, 15 insertions(+), 0 deletions(-)

diff --git a/src/Sema.zig b/src/Sema.zig @@ -17682,6 +17682,10 @@ fn reifyStruct( } const abi_align = @intCast(u29, (try alignment_val.getUnsignedIntAdvanced(target, sema.kit(block, src))).?); + if (layout == .Packed and abi_align != 0) { + return sema.fail(block, src, "alignment in a packed struct field must be set to 0", .{}); + } + const field_name = try name_val.toAllocatedBytes( Type.initTag(.const_slice_u8), new_decl_arena_allocator, diff --git a/test/cases/compile_errors/packed_struct_field_alignment_unavailable_for_reify_type.zig b/test/cases/compile_errors/packed_struct_field_alignment_unavailable_for_reify_type.zig @@ -0,0 +1,11 @@ +export fn entry() void { + _ = @Type(.{ .Struct = .{ .layout = .Packed, .fields = &.{ + .{ .name = "one", .field_type = u4, .default_value = null, .is_comptime = false, .alignment = 2 }, + }, .decls = &.{}, .is_tuple = false } }); +} + +// error +// backend=stage2 +// target=native +// +// :2:9: error: alignment in a packed struct field must be set to 0