| author | |
| committer | |
| log | de24cea2cff33654ee41369517144bb94f6d139d |
| tree | 967afd2c0af7bf975fa8b29de278e11708a80df7 |
| parent | 61aaef0b074dc2567e4c35c9cb55cb042c18d065 |
Closes #127943 files changed, 53 insertions(+), 0 deletions(-)
src/Sema.zig+14| ... | @@ -24770,6 +24770,20 @@ fn beginComptimePtrMutation( | ... | @@ -24770,6 +24770,20 @@ fn beginComptimePtrMutation( |
| 24770 | else => unreachable, | 24770 | else => unreachable, |
| 24771 | }, | 24771 | }, |
| 24772 | 24772 | ||
| 24773 | .empty_struct_value => { | ||
| 24774 | const duped = try sema.arena.create(Value); | ||
| 24775 | duped.* = Value.initTag(.the_only_possible_value); | ||
| 24776 | return beginComptimePtrMutationInner( | ||
| 24777 | sema, | ||
| 24778 | block, | ||
| 24779 | src, | ||
| 24780 | parent.ty.structFieldType(field_index), | ||
| 24781 | duped, | ||
| 24782 | ptr_elem_ty, | ||
| 24783 | parent.decl_ref_mut, | ||
| 24784 | ); | ||
| 24785 | }, | ||
| 24786 | |||
| 24773 | else => unreachable, | 24787 | else => unreachable, |
| 24774 | }, | 24788 | }, |
| 24775 | .reinterpret => |reinterpret| { | 24789 | .reinterpret => |reinterpret| { |
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/12794.zig"); | ||
| 90 | _ = @import("behavior/byteswap.zig"); | 91 | _ = @import("behavior/byteswap.zig"); |
| 91 | _ = @import("behavior/byval_arg_var.zig"); | 92 | _ = @import("behavior/byval_arg_var.zig"); |
| 92 | _ = @import("behavior/call.zig"); | 93 | _ = @import("behavior/call.zig"); |
test/behavior/bugs/12794.zig created+38| ... | @@ -0,0 +1,38 @@ | ||
| 1 | const std = @import("std"); | ||
| 2 | |||
| 3 | fn NamespacedComponents(comptime modules: anytype) type { | ||
| 4 | return @Type(.{ | ||
| 5 | .Struct = .{ | ||
| 6 | .layout = .Auto, | ||
| 7 | .is_tuple = false, | ||
| 8 | .fields = &.{.{ | ||
| 9 | .name = "components", | ||
| 10 | .field_type = @TypeOf(modules.components), | ||
| 11 | .default_value = null, | ||
| 12 | .is_comptime = false, | ||
| 13 | .alignment = @alignOf(@TypeOf(modules.components)), | ||
| 14 | }}, | ||
| 15 | .decls = &[_]std.builtin.Type.Declaration{}, | ||
| 16 | }, | ||
| 17 | }); | ||
| 18 | } | ||
| 19 | |||
| 20 | fn namespacedComponents(comptime modules: anytype) NamespacedComponents(modules) { | ||
| 21 | var x: NamespacedComponents(modules) = undefined; | ||
| 22 | x.components = modules.components; | ||
| 23 | return x; | ||
| 24 | } | ||
| 25 | |||
| 26 | pub fn World(comptime modules: anytype) type { | ||
| 27 | const all_components = namespacedComponents(modules); | ||
| 28 | _ = all_components; | ||
| 29 | return struct {}; | ||
| 30 | } | ||
| 31 | |||
| 32 | test { | ||
| 33 | _ = World(.{ | ||
| 34 | .components = .{ | ||
| 35 | .location = struct {}, | ||
| 36 | }, | ||
| 37 | }); | ||
| 38 | } | ||