diff options
| author | Matthew Lugg <mlugg@mlugg.co.uk> | 2025-08-03 09:58:23 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-08-03 09:58:23 +0100 |
| commit | c80aa9f71960ed90787033293fbc4c6ccfe0fba8 (patch) | |
| tree | 84d5df492d5a0f6c3c31370ed97c6e58e1c14c40 /lib/std | |
| parent | 616e69c80745cdc872b1db5ad63b919d82d9e9cb (diff) | |
| parent | e82d67233b615e04fb5e4f31cd93216a2c1c2899 (diff) | |
| download | zig-c80aa9f71960ed90787033293fbc4c6ccfe0fba8.tar.gz zig-c80aa9f71960ed90787033293fbc4c6ccfe0fba8.zip | |
Merge pull request #22997 from Rexicon226/align-0-reify
sema: compile error on reifying align(0) fields and pointers
Diffstat (limited to 'lib/std')
| -rw-r--r-- | lib/std/meta.zig | 2 | ||||
| -rw-r--r-- | lib/std/zig/AstGen.zig | 3 | ||||
| -rw-r--r-- | lib/std/zig/llvm/Builder.zig | 7 |
3 files changed, 8 insertions, 4 deletions
diff --git a/lib/std/meta.zig b/lib/std/meta.zig index 0cee23cfa8..65b7d60c18 100644 --- a/lib/std/meta.zig +++ b/lib/std/meta.zig @@ -939,7 +939,7 @@ fn CreateUniqueTuple(comptime N: comptime_int, comptime types: [N]type) type { .type = T, .default_value_ptr = null, .is_comptime = false, - .alignment = 0, + .alignment = @alignOf(T), }; } diff --git a/lib/std/zig/AstGen.zig b/lib/std/zig/AstGen.zig index 52fc41a2c9..ab81f343bd 100644 --- a/lib/std/zig/AstGen.zig +++ b/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; diff --git a/lib/std/zig/llvm/Builder.zig b/lib/std/zig/llvm/Builder.zig index f3ff63ec33..ba6faaec2c 100644 --- a/lib/std/zig/llvm/Builder.zig +++ b/lib/std/zig/llvm/Builder.zig @@ -8533,18 +8533,19 @@ pub const Metadata = enum(u32) { .type = []const u8, .default_value_ptr = null, .is_comptime = false, - .alignment = 0, + .alignment = @alignOf([]const u8), }; } fmt_str = fmt_str ++ "("; inline for (fields[2..], names) |*field, name| { fmt_str = fmt_str ++ "{[" ++ name ++ "]f}"; + const T = std.fmt.Formatter(FormatData, format); field.* = .{ .name = name, - .type = std.fmt.Formatter(FormatData, format), + .type = T, .default_value_ptr = null, .is_comptime = false, - .alignment = 0, + .alignment = @alignOf(T), }; } fmt_str = fmt_str ++ ")\n"; |
