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: {...@@ -708,7 +708,7 @@ pub const Arguments = blk: {
708 field.* = .{708 field.* = .{
709 .name = decl.name,709 .name = decl.name,
710 .type = @field(attributes, decl.name),710 .type = @field(attributes, decl.name),
711 .alignment = 0,711 .alignment = @alignOf(@field(attributes, decl.name)),
712 };712 };
713 }713 }
714714
lib/std/meta.zig+1-1
...@@ -939,7 +939,7 @@ fn CreateUniqueTuple(comptime N: comptime_int, comptime types: [N]type) type {...@@ -939,7 +939,7 @@ fn CreateUniqueTuple(comptime N: comptime_int, comptime types: [N]type) type {
939 .type = T,939 .type = T,
940 .default_value_ptr = null,940 .default_value_ptr = null,
941 .is_comptime = false,941 .is_comptime = false,
942 .alignment = 0,942 .alignment = @alignOf(T),
943 };943 };
944 }944 }
945945
lib/std/zig/llvm/Builder.zig+4-3
...@@ -8533,18 +8533,19 @@ pub const Metadata = enum(u32) {...@@ -8533,18 +8533,19 @@ pub const Metadata = enum(u32) {
8533 .type = []const u8,8533 .type = []const u8,
8534 .default_value_ptr = null,8534 .default_value_ptr = null,
8535 .is_comptime = false,8535 .is_comptime = false,
8536 .alignment = 0,8536 .alignment = @alignOf([]const u8),
8537 };8537 };
8538 }8538 }
8539 fmt_str = fmt_str ++ "(";8539 fmt_str = fmt_str ++ "(";
8540 inline for (fields[2..], names) |*field, name| {8540 inline for (fields[2..], names) |*field, name| {
8541 fmt_str = fmt_str ++ "{[" ++ name ++ "]f}";8541 fmt_str = fmt_str ++ "{[" ++ name ++ "]f}";
8542 const T = std.fmt.Formatter(FormatData, format);
8542 field.* = .{8543 field.* = .{
8543 .name = name,8544 .name = name,
8544 .type = std.fmt.Formatter(FormatData, format),8545 .type = T,
8545 .default_value_ptr = null,8546 .default_value_ptr = null,
8546 .is_comptime = false,8547 .is_comptime = false,
8547 .alignment = 0,8548 .alignment = @alignOf(T),
8548 };8549 };
8549 }8550 }
8550 fmt_str = fmt_str ++ ")\n";8551 fmt_str = fmt_str ++ ")\n";
src/InternPool.zig+22-16
...@@ -1137,13 +1137,16 @@ const Local = struct {...@@ -1137,13 +1137,16 @@ const Local = struct {
1137 const elem_info = @typeInfo(Elem).@"struct";1137 const elem_info = @typeInfo(Elem).@"struct";
1138 const elem_fields = elem_info.fields;1138 const elem_fields = elem_info.fields;
1139 var new_fields: [elem_fields.len]std.builtin.Type.StructField = undefined;1139 var new_fields: [elem_fields.len]std.builtin.Type.StructField = undefined;
1140 for (&new_fields, elem_fields) |*new_field, elem_field| new_field.* = .{1140 for (&new_fields, elem_fields) |*new_field, elem_field| {
1141 .name = elem_field.name,1141 const T = *[len]elem_field.type;
1142 .type = *[len]elem_field.type,1142 new_field.* = .{
1143 .default_value_ptr = null,1143 .name = elem_field.name,
1144 .is_comptime = false,1144 .type = T,
1145 .alignment = 0,1145 .default_value_ptr = null,
1146 };1146 .is_comptime = false,
1147 .alignment = @alignOf(T),
1148 };
1149 }
1147 return @Type(.{ .@"struct" = .{1150 return @Type(.{ .@"struct" = .{
1148 .layout = .auto,1151 .layout = .auto,
1149 .fields = &new_fields,1152 .fields = &new_fields,
...@@ -1158,22 +1161,25 @@ const Local = struct {...@@ -1158,22 +1161,25 @@ const Local = struct {
1158 const elem_info = @typeInfo(Elem).@"struct";1161 const elem_info = @typeInfo(Elem).@"struct";
1159 const elem_fields = elem_info.fields;1162 const elem_fields = elem_info.fields;
1160 var new_fields: [elem_fields.len]std.builtin.Type.StructField = undefined;1163 var new_fields: [elem_fields.len]std.builtin.Type.StructField = undefined;
1161 for (&new_fields, elem_fields) |*new_field, elem_field| new_field.* = .{1164 for (&new_fields, elem_fields) |*new_field, elem_field| {
1162 .name = elem_field.name,1165 const T = @Type(.{ .pointer = .{
1163 .type = @Type(.{ .pointer = .{
1164 .size = opts.size,1166 .size = opts.size,
1165 .is_const = opts.is_const,1167 .is_const = opts.is_const,
1166 .is_volatile = false,1168 .is_volatile = false,
1167 .alignment = 0,1169 .alignment = @alignOf(elem_field.type),
1168 .address_space = .generic,1170 .address_space = .generic,
1169 .child = elem_field.type,1171 .child = elem_field.type,
1170 .is_allowzero = false,1172 .is_allowzero = false,
1171 .sentinel_ptr = null,1173 .sentinel_ptr = null,
1172 } }),1174 } });
1173 .default_value_ptr = null,1175 new_field.* = .{
1174 .is_comptime = false,1176 .name = elem_field.name,
1175 .alignment = 0,1177 .type = T,
1176 };1178 .default_value_ptr = null,
1179 .is_comptime = false,
1180 .alignment = @alignOf(T),
1181 };
1182 }
1177 return @Type(.{ .@"struct" = .{1183 return @Type(.{ .@"struct" = .{
1178 .layout = .auto,1184 .layout = .auto,
1179 .fields = &new_fields,1185 .fields = &new_fields,
src/Sema.zig+1-1
...@@ -20332,7 +20332,7 @@ fn zirReify(...@@ -20332,7 +20332,7 @@ fn zirReify(
20332 ).?);20332 ).?);
2033320333
20334 if (!try sema.intFitsInType(alignment_val, align_ty, null)) {20334 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)});
20336 }20336 }
20337 const alignment_val_int = try alignment_val.toUnsignedIntSema(pt);20337 const alignment_val_int = try alignment_val.toUnsignedIntSema(pt);
20338 const abi_align = try sema.validateAlign(block, src, alignment_val_int);20338 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 {...@@ -33,13 +33,16 @@ pub fn nextInstruction(as: *Assemble) !?Instruction {
33 var symbols: Symbols: {33 var symbols: Symbols: {
34 const symbols = @typeInfo(@TypeOf(instruction.symbols)).@"struct".fields;34 const symbols = @typeInfo(@TypeOf(instruction.symbols)).@"struct".fields;
35 var symbol_fields: [symbols.len]std.builtin.Type.StructField = undefined;35 var symbol_fields: [symbols.len]std.builtin.Type.StructField = undefined;
36 for (&symbol_fields, symbols) |*symbol_field, symbol| symbol_field.* = .{36 for (&symbol_fields, symbols) |*symbol_field, symbol| {
37 .name = symbol.name,37 const Storage = zonCast(SymbolSpec, @field(instruction.symbols, symbol.name), .{}).Storage();
38 .type = zonCast(SymbolSpec, @field(instruction.symbols, symbol.name), .{}).Storage(),38 symbol_field.* = .{
39 .default_value_ptr = null,39 .name = symbol.name,
40 .is_comptime = false,40 .type = Storage,
41 .alignment = 0,41 .default_value_ptr = null,
42 };42 .is_comptime = false,
43 .alignment = @alignOf(Storage),
44 };
45 }
43 break :Symbols @Type(.{ .@"struct" = .{46 break :Symbols @Type(.{ .@"struct" = .{
44 .layout = .auto,47 .layout = .auto,
45 .fields = &symbol_fields,48 .fields = &symbol_fields,
test/behavior/tuple.zig+4-2
...@@ -318,6 +318,8 @@ test "tuple type with void field" {...@@ -318,6 +318,8 @@ test "tuple type with void field" {
318test "zero sized struct in tuple handled correctly" {318test "zero sized struct in tuple handled correctly" {
319 const State = struct {319 const State = struct {
320 const Self = @This();320 const Self = @This();
321 const Inner = struct {};
322
321 data: @Type(.{323 data: @Type(.{
322 .@"struct" = .{324 .@"struct" = .{
323 .is_tuple = true,325 .is_tuple = true,
...@@ -325,10 +327,10 @@ test "zero sized struct in tuple handled correctly" {...@@ -325,10 +327,10 @@ test "zero sized struct in tuple handled correctly" {
325 .decls = &.{},327 .decls = &.{},
326 .fields = &.{.{328 .fields = &.{.{
327 .name = "0",329 .name = "0",
328 .type = struct {},330 .type = Inner,
329 .default_value_ptr = null,331 .default_value_ptr = null,
330 .is_comptime = false,332 .is_comptime = false,
331 .alignment = 0,333 .alignment = @alignOf(Inner),
332 }},334 }},
333 },335 },
334 }),336 }),
test/behavior/type.zig+1-1
...@@ -735,7 +735,7 @@ test "struct field names sliced at comptime from larger string" {...@@ -735,7 +735,7 @@ test "struct field names sliced at comptime from larger string" {
735 var it = std.mem.tokenizeScalar(u8, text, '\n');735 var it = std.mem.tokenizeScalar(u8, text, '\n');
736 while (it.next()) |name| {736 while (it.next()) |name| {
737 fields = fields ++ &[_]Type.StructField{.{737 fields = fields ++ &[_]Type.StructField{.{
738 .alignment = 0,738 .alignment = @alignOf(usize),
739 .name = name ++ "",739 .name = name ++ "",
740 .type = usize,740 .type = usize,
741 .default_value_ptr = null,741 .default_value_ptr = null,
test/cases/compile_errors/align_zero.zig+1-19
...@@ -65,24 +65,7 @@ export fn k() void {...@@ -65,24 +65,7 @@ export fn k() void {
65 } });65 } });
66}66}
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
83// error68// error
84// backend=stage2
85// target=native
86//69//
87// :1:27: error: alignment must be >= 170// :1:27: error: alignment must be >= 1
88// :7:34: error: alignment must be >= 171// :7:34: error: alignment must be >= 1
...@@ -93,6 +76,5 @@ export fn l() void {...@@ -93,6 +76,5 @@ export fn l() void {
93// :29:17: error: alignment must be >= 176// :29:17: error: alignment must be >= 1
94// :33:35: error: alignment must be >= 177// :33:35: error: alignment must be >= 1
95// :37:34: error: alignment must be >= 178// :37:34: error: alignment must be >= 1
96// :41:9: error: alignment can only be 0 on packed struct fields79// :41:9: error: alignment must be >= 1
97// :56:9: error: alignment must be >= 180// :56:9: error: alignment must be >= 1
98// :69:9: error: alignment in a packed struct field must be set to 0