authorgravatar for david@vortan.devDavid Rubin <david@vortan.dev> 2025-02-24 04:02:06-08:00
committergravatar for david@vortan.devDavid Rubin <david@vortan.dev> 2025-08-01 14:57:16-07:00
logd6c74a95fdaba4ed373f80baa725dcc53b27e402
treee6827e6fa40ed25f5c6cee6eab0edace8a62c190
parent17330867eb8f9e24ec8aadf23592e36f90f9dcb3
signaturelock-open Commit is signed but in an unrecognized format.

remove usages of `.alignment = 0`


9 files changed, 45 insertions(+), 51 deletions(-)

lib/compiler/aro/aro/Attribute.zig+1-1
......@@ -708,7 +708,7 @@ pub const Arguments = blk: {
708708 field.* = .{
709709 .name = decl.name,
710710 .type = @field(attributes, decl.name),
711 .alignment = 0,
711 .alignment = @alignOf(@field(attributes, decl.name)),
712712 };
713713 }
714714
lib/std/meta.zig+1-1
......@@ -939,7 +939,7 @@ fn CreateUniqueTuple(comptime N: comptime_int, comptime types: [N]type) type {
939939 .type = T,
940940 .default_value_ptr = null,
941941 .is_comptime = false,
942 .alignment = 0,
942 .alignment = @alignOf(T),
943943 };
944944 }
945945
lib/std/zig/llvm/Builder.zig+4-3
......@@ -8533,18 +8533,19 @@ pub const Metadata = enum(u32) {
85338533 .type = []const u8,
85348534 .default_value_ptr = null,
85358535 .is_comptime = false,
8536 .alignment = 0,
8536 .alignment = @alignOf([]const u8),
85378537 };
85388538 }
85398539 fmt_str = fmt_str ++ "(";
85408540 inline for (fields[2..], names) |*field, name| {
85418541 fmt_str = fmt_str ++ "{[" ++ name ++ "]f}";
8542 const T = std.fmt.Formatter(FormatData, format);
85428543 field.* = .{
85438544 .name = name,
8544 .type = std.fmt.Formatter(FormatData, format),
8545 .type = T,
85458546 .default_value_ptr = null,
85468547 .is_comptime = false,
8547 .alignment = 0,
8548 .alignment = @alignOf(T),
85488549 };
85498550 }
85508551 fmt_str = fmt_str ++ ")\n";
src/InternPool.zig+22-16
......@@ -1137,13 +1137,16 @@ const Local = struct {
11371137 const elem_info = @typeInfo(Elem).@"struct";
11381138 const elem_fields = elem_info.fields;
11391139 var new_fields: [elem_fields.len]std.builtin.Type.StructField = undefined;
1140 for (&new_fields, elem_fields) |*new_field, elem_field| new_field.* = .{
1141 .name = elem_field.name,
1142 .type = *[len]elem_field.type,
1143 .default_value_ptr = null,
1144 .is_comptime = false,
1145 .alignment = 0,
1146 };
1140 for (&new_fields, elem_fields) |*new_field, elem_field| {
1141 const T = *[len]elem_field.type;
1142 new_field.* = .{
1143 .name = elem_field.name,
1144 .type = T,
1145 .default_value_ptr = null,
1146 .is_comptime = false,
1147 .alignment = @alignOf(T),
1148 };
1149 }
11471150 return @Type(.{ .@"struct" = .{
11481151 .layout = .auto,
11491152 .fields = &new_fields,
......@@ -1158,22 +1161,25 @@ const Local = struct {
11581161 const elem_info = @typeInfo(Elem).@"struct";
11591162 const elem_fields = elem_info.fields;
11601163 var new_fields: [elem_fields.len]std.builtin.Type.StructField = undefined;
1161 for (&new_fields, elem_fields) |*new_field, elem_field| new_field.* = .{
1162 .name = elem_field.name,
1163 .type = @Type(.{ .pointer = .{
1164 for (&new_fields, elem_fields) |*new_field, elem_field| {
1165 const T = @Type(.{ .pointer = .{
11641166 .size = opts.size,
11651167 .is_const = opts.is_const,
11661168 .is_volatile = false,
1167 .alignment = 0,
1169 .alignment = @alignOf(elem_field.type),
11681170 .address_space = .generic,
11691171 .child = elem_field.type,
11701172 .is_allowzero = false,
11711173 .sentinel_ptr = null,
1172 } }),
1173 .default_value_ptr = null,
1174 .is_comptime = false,
1175 .alignment = 0,
1176 };
1174 } });
1175 new_field.* = .{
1176 .name = elem_field.name,
1177 .type = T,
1178 .default_value_ptr = null,
1179 .is_comptime = false,
1180 .alignment = @alignOf(T),
1181 };
1182 }
11771183 return @Type(.{ .@"struct" = .{
11781184 .layout = .auto,
11791185 .fields = &new_fields,
src/Sema.zig+1-1
......@@ -20332,7 +20332,7 @@ fn zirReify(
2033220332 ).?);
2033320333
2033420334 if (!try sema.intFitsInType(alignment_val, align_ty, null)) {
20335 return sema.fail(block, src, "alignment must fit in '{}'", .{align_ty.fmt(pt)});
20335 return sema.fail(block, src, "alignment must fit in '{f}'", .{align_ty.fmt(pt)});
2033620336 }
2033720337 const alignment_val_int = try alignment_val.toUnsignedIntSema(pt);
2033820338 const abi_align = try sema.validateAlign(block, src, alignment_val_int);
src/codegen/aarch64/Assemble.zig+10-7
......@@ -33,13 +33,16 @@ pub fn nextInstruction(as: *Assemble) !?Instruction {
3333 var symbols: Symbols: {
3434 const symbols = @typeInfo(@TypeOf(instruction.symbols)).@"struct".fields;
3535 var symbol_fields: [symbols.len]std.builtin.Type.StructField = undefined;
36 for (&symbol_fields, symbols) |*symbol_field, symbol| symbol_field.* = .{
37 .name = symbol.name,
38 .type = zonCast(SymbolSpec, @field(instruction.symbols, symbol.name), .{}).Storage(),
39 .default_value_ptr = null,
40 .is_comptime = false,
41 .alignment = 0,
42 };
36 for (&symbol_fields, symbols) |*symbol_field, symbol| {
37 const Storage = zonCast(SymbolSpec, @field(instruction.symbols, symbol.name), .{}).Storage();
38 symbol_field.* = .{
39 .name = symbol.name,
40 .type = Storage,
41 .default_value_ptr = null,
42 .is_comptime = false,
43 .alignment = @alignOf(Storage),
44 };
45 }
4346 break :Symbols @Type(.{ .@"struct" = .{
4447 .layout = .auto,
4548 .fields = &symbol_fields,
test/behavior/tuple.zig+4-2
......@@ -318,6 +318,8 @@ test "tuple type with void field" {
318318test "zero sized struct in tuple handled correctly" {
319319 const State = struct {
320320 const Self = @This();
321 const Inner = struct {};
322
321323 data: @Type(.{
322324 .@"struct" = .{
323325 .is_tuple = true,
......@@ -325,10 +327,10 @@ test "zero sized struct in tuple handled correctly" {
325327 .decls = &.{},
326328 .fields = &.{.{
327329 .name = "0",
328 .type = struct {},
330 .type = Inner,
329331 .default_value_ptr = null,
330332 .is_comptime = false,
331 .alignment = 0,
333 .alignment = @alignOf(Inner),
332334 }},
333335 },
334336 }),
test/behavior/type.zig+1-1
......@@ -735,7 +735,7 @@ test "struct field names sliced at comptime from larger string" {
735735 var it = std.mem.tokenizeScalar(u8, text, '\n');
736736 while (it.next()) |name| {
737737 fields = fields ++ &[_]Type.StructField{.{
738 .alignment = 0,
738 .alignment = @alignOf(usize),
739739 .name = name ++ "",
740740 .type = usize,
741741 .default_value_ptr = null,
test/cases/compile_errors/align_zero.zig+1-19
......@@ -65,24 +65,7 @@ export fn k() void {
6565 } });
6666}
6767
68export fn l() void {
69 _ = @Type(.{ .@"struct" = .{
70 .layout = .@"packed",
71 .fields = &.{.{
72 .name = "test",
73 .type = u32,
74 .default_value_ptr = null,
75 .is_comptime = false,
76 .alignment = 8,
77 }},
78 .decls = &.{},
79 .is_tuple = false,
80 } });
81}
82
8368// error
84// backend=stage2
85// target=native
8669//
8770// :1:27: error: alignment must be >= 1
8871// :7:34: error: alignment must be >= 1
......@@ -93,6 +76,5 @@ export fn l() void {
9376// :29:17: error: alignment must be >= 1
9477// :33:35: error: alignment must be >= 1
9578// :37:34: error: alignment must be >= 1
96// :41:9: error: alignment can only be 0 on packed struct fields
79// :41:9: error: alignment must be >= 1
9780// :56:9: error: alignment must be >= 1
98// :69:9: error: alignment in a packed struct field must be set to 0