| author | |
| committer | |
| log | d6c74a95fdaba4ed373f80baa725dcc53b27e402 |
| tree | e6827e6fa40ed25f5c6cee6eab0edace8a62c190 |
| parent | 17330867eb8f9e24ec8aadf23592e36f90f9dcb3 |
| signature |
9 files changed, 45 insertions(+), 51 deletions(-)
lib/compiler/aro/aro/Attribute.zig+1-1| ... | ... | @@ -708,7 +708,7 @@ pub const Arguments = blk: { |
| 708 | 708 | field.* = .{ |
| 709 | 709 | .name = decl.name, |
| 710 | 710 | .type = @field(attributes, decl.name), |
| 711 | .alignment = 0, | |
| 711 | .alignment = @alignOf(@field(attributes, decl.name)), | |
| 712 | 712 | }; |
| 713 | 713 | } |
| 714 | 714 |
lib/std/meta.zig+1-1| ... | ... | @@ -939,7 +939,7 @@ fn CreateUniqueTuple(comptime N: comptime_int, comptime types: [N]type) type { |
| 939 | 939 | .type = T, |
| 940 | 940 | .default_value_ptr = null, |
| 941 | 941 | .is_comptime = false, |
| 942 | .alignment = 0, | |
| 942 | .alignment = @alignOf(T), | |
| 943 | 943 | }; |
| 944 | 944 | } |
| 945 | 945 |
lib/std/zig/llvm/Builder.zig+4-3| ... | ... | @@ -8533,18 +8533,19 @@ pub const Metadata = enum(u32) { |
| 8533 | 8533 | .type = []const u8, |
| 8534 | 8534 | .default_value_ptr = null, |
| 8535 | 8535 | .is_comptime = false, |
| 8536 | .alignment = 0, | |
| 8536 | .alignment = @alignOf([]const u8), | |
| 8537 | 8537 | }; |
| 8538 | 8538 | } |
| 8539 | 8539 | fmt_str = fmt_str ++ "("; |
| 8540 | 8540 | inline for (fields[2..], names) |*field, name| { |
| 8541 | 8541 | fmt_str = fmt_str ++ "{[" ++ name ++ "]f}"; |
| 8542 | const T = std.fmt.Formatter(FormatData, format); | |
| 8542 | 8543 | field.* = .{ |
| 8543 | 8544 | .name = name, |
| 8544 | .type = std.fmt.Formatter(FormatData, format), | |
| 8545 | .type = T, | |
| 8545 | 8546 | .default_value_ptr = null, |
| 8546 | 8547 | .is_comptime = false, |
| 8547 | .alignment = 0, | |
| 8548 | .alignment = @alignOf(T), | |
| 8548 | 8549 | }; |
| 8549 | 8550 | } |
| 8550 | 8551 | fmt_str = fmt_str ++ ")\n"; |
src/InternPool.zig+22-16| ... | ... | @@ -1137,13 +1137,16 @@ const Local = struct { |
| 1137 | 1137 | const elem_info = @typeInfo(Elem).@"struct"; |
| 1138 | 1138 | const elem_fields = elem_info.fields; |
| 1139 | 1139 | 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 | } | |
| 1147 | 1150 | return @Type(.{ .@"struct" = .{ |
| 1148 | 1151 | .layout = .auto, |
| 1149 | 1152 | .fields = &new_fields, |
| ... | ... | @@ -1158,22 +1161,25 @@ const Local = struct { |
| 1158 | 1161 | const elem_info = @typeInfo(Elem).@"struct"; |
| 1159 | 1162 | const elem_fields = elem_info.fields; |
| 1160 | 1163 | 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 = .{ | |
| 1164 | 1166 | .size = opts.size, |
| 1165 | 1167 | .is_const = opts.is_const, |
| 1166 | 1168 | .is_volatile = false, |
| 1167 | .alignment = 0, | |
| 1169 | .alignment = @alignOf(elem_field.type), | |
| 1168 | 1170 | .address_space = .generic, |
| 1169 | 1171 | .child = elem_field.type, |
| 1170 | 1172 | .is_allowzero = false, |
| 1171 | 1173 | .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 | } | |
| 1177 | 1183 | return @Type(.{ .@"struct" = .{ |
| 1178 | 1184 | .layout = .auto, |
| 1179 | 1185 | .fields = &new_fields, |
src/Sema.zig+1-1| ... | ... | @@ -20332,7 +20332,7 @@ fn zirReify( |
| 20332 | 20332 | ).?); |
| 20333 | 20333 | |
| 20334 | 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 | 20337 | const alignment_val_int = try alignment_val.toUnsignedIntSema(pt); |
| 20338 | 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 | 33 | var symbols: Symbols: { |
| 34 | 34 | const symbols = @typeInfo(@TypeOf(instruction.symbols)).@"struct".fields; |
| 35 | 35 | 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 | } | |
| 43 | 46 | break :Symbols @Type(.{ .@"struct" = .{ |
| 44 | 47 | .layout = .auto, |
| 45 | 48 | .fields = &symbol_fields, |
test/behavior/tuple.zig+4-2| ... | ... | @@ -318,6 +318,8 @@ test "tuple type with void field" { |
| 318 | 318 | test "zero sized struct in tuple handled correctly" { |
| 319 | 319 | const State = struct { |
| 320 | 320 | const Self = @This(); |
| 321 | const Inner = struct {}; | |
| 322 | ||
| 321 | 323 | data: @Type(.{ |
| 322 | 324 | .@"struct" = .{ |
| 323 | 325 | .is_tuple = true, |
| ... | ... | @@ -325,10 +327,10 @@ test "zero sized struct in tuple handled correctly" { |
| 325 | 327 | .decls = &.{}, |
| 326 | 328 | .fields = &.{.{ |
| 327 | 329 | .name = "0", |
| 328 | .type = struct {}, | |
| 330 | .type = Inner, | |
| 329 | 331 | .default_value_ptr = null, |
| 330 | 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 | 735 | var it = std.mem.tokenizeScalar(u8, text, '\n'); |
| 736 | 736 | while (it.next()) |name| { |
| 737 | 737 | fields = fields ++ &[_]Type.StructField{.{ |
| 738 | .alignment = 0, | |
| 738 | .alignment = @alignOf(usize), | |
| 739 | 739 | .name = name ++ "", |
| 740 | 740 | .type = usize, |
| 741 | 741 | .default_value_ptr = null, |
test/cases/compile_errors/align_zero.zig+1-19| ... | ... | @@ -65,24 +65,7 @@ export fn k() void { |
| 65 | 65 | } }); |
| 66 | 66 | } |
| 67 | 67 | |
| 68 | export 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 | 68 | // error |
| 84 | // backend=stage2 | |
| 85 | // target=native | |
| 86 | 69 | // |
| 87 | 70 | // :1:27: error: alignment must be >= 1 |
| 88 | 71 | // :7:34: error: alignment must be >= 1 |
| ... | ... | @@ -93,6 +76,5 @@ export fn l() void { |
| 93 | 76 | // :29:17: error: alignment must be >= 1 |
| 94 | 77 | // :33:35: error: alignment must be >= 1 |
| 95 | 78 | // :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 | |
| 97 | 80 | // :56:9: error: alignment must be >= 1 |
| 98 | // :69:9: error: alignment in a packed struct field must be set to 0 |