aboutsummaryrefslogtreecommitdiff
path: root/lib/std
diff options
context:
space:
mode:
authorMatthew Lugg <mlugg@mlugg.co.uk>2025-08-03 09:58:23 +0100
committerGitHub <noreply@github.com>2025-08-03 09:58:23 +0100
commitc80aa9f71960ed90787033293fbc4c6ccfe0fba8 (patch)
tree84d5df492d5a0f6c3c31370ed97c6e58e1c14c40 /lib/std
parent616e69c80745cdc872b1db5ad63b919d82d9e9cb (diff)
parente82d67233b615e04fb5e4f31cd93216a2c1c2899 (diff)
downloadzig-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.zig2
-rw-r--r--lib/std/zig/AstGen.zig3
-rw-r--r--lib/std/zig/llvm/Builder.zig7
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";