commit 17d214a249e8d28aa01bc89325ba57918d5bb525 (tree)
parent 5ff518fbb9ea2fb5a745841731912acbe2f046d9
Author: Veikka Tuominen <git@vexu.eu>
Date: Fri, 25 Mar 2022 13:27:03 +0200
Sema: implement zirStructInit for runtime-known union values
Diffstat:
2 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/src/Sema.zig b/src/Sema.zig
@@ -12264,7 +12264,9 @@ fn zirStructInit(
return alloc;
}
- return sema.fail(block, src, "TODO: Sema.zirStructInit for runtime-known union values", .{});
+ try sema.requireRuntimeBlock(block, src);
+ try sema.queueFullTypeResolution(resolved_ty);
+ return block.addUnionInit(resolved_ty, field_index, init_inst);
}
unreachable;
}
diff --git a/test/behavior/union.zig b/test/behavior/union.zig
@@ -1132,3 +1132,20 @@ test "global variable struct contains union initialized to non-most-aligned fiel
T.s.u.a += 1;
try expect(T.s.u.a == 4);
}
+
+test "union with no result loc initiated with a runtime value" {
+ if (builtin.zig_backend == .stage2_c) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
+ if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
+
+ const U = union {
+ a: u32,
+ b: u32,
+ fn foo(u: @This()) void {
+ _ = u;
+ }
+ };
+ var a: u32 = 1;
+ U.foo(U{ .a = a });
+}