authorgravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-09-09 15:23:36+03:00
committergravatar for git@vexu.euVeikka Tuominen <git@vexu.eu> 2022-09-15 00:48:47+03:00
log930f904aaa7d591d86a8c3216526711be95fcc17
tree6f5577f11861cd70793f1731f3e7bdccbc972161
parentde24cea2cff33654ee41369517144bb94f6d139d

Sema: resolve lazy align in reifyStruct

Closes #12786

3 files changed, 30 insertions(+), 1 deletions(-)

src/Sema.zig+1-1
...@@ -17406,7 +17406,7 @@ fn reifyStruct(...@@ -17406,7 +17406,7 @@ fn reifyStruct(
17406 if (!try sema.intFitsInType(block, src, alignment_val, Type.u32, null)) {17406 if (!try sema.intFitsInType(block, src, alignment_val, Type.u32, null)) {
17407 return sema.fail(block, src, "alignment must fit in 'u32'", .{});17407 return sema.fail(block, src, "alignment must fit in 'u32'", .{});
17408 }17408 }
17409 const abi_align = @intCast(u29, alignment_val.toUnsignedInt(target));17409 const abi_align = @intCast(u29, (try alignment_val.getUnsignedIntAdvanced(target, sema.kit(block, src))).?);
1741017410
17411 const field_name = try name_val.toAllocatedBytes(17411 const field_name = try name_val.toAllocatedBytes(
17412 Type.initTag(.const_slice_u8),17412 Type.initTag(.const_slice_u8),
test/behavior.zig+1
...@@ -87,6 +87,7 @@ test {...@@ -87,6 +87,7 @@ test {
87 _ = @import("behavior/bugs/12486.zig");87 _ = @import("behavior/bugs/12486.zig");
88 _ = @import("behavior/bugs/12680.zig");88 _ = @import("behavior/bugs/12680.zig");
89 _ = @import("behavior/bugs/12776.zig");89 _ = @import("behavior/bugs/12776.zig");
90 _ = @import("behavior/bugs/12786.zig");
90 _ = @import("behavior/bugs/12794.zig");91 _ = @import("behavior/bugs/12794.zig");
91 _ = @import("behavior/byteswap.zig");92 _ = @import("behavior/byteswap.zig");
92 _ = @import("behavior/byval_arg_var.zig");93 _ = @import("behavior/byval_arg_var.zig");
test/behavior/bugs/12786.zig created+28
...@@ -0,0 +1,28 @@
1const std = @import("std");
2
3fn NamespacedGlobals(comptime modules: anytype) type {
4 return @Type(.{
5 .Struct = .{
6 .layout = .Auto,
7 .is_tuple = false,
8 .fields = &.{
9 .{
10 .name = "globals",
11 .field_type = modules.mach.globals,
12 .default_value = null,
13 .is_comptime = false,
14 .alignment = @alignOf(modules.mach.globals),
15 },
16 },
17 .decls = &[_]std.builtin.Type.Declaration{},
18 },
19 });
20}
21
22test {
23 _ = NamespacedGlobals(.{
24 .mach = .{
25 .globals = struct {},
26 },
27 });
28}