Commit 17d214a249

Veikka Tuominen <git@vexu.eu>
2022-03-25 12:27:03
Sema: implement zirStructInit for runtime-known union values
1 parent 5ff518f
Changed files (2)
src
test
behavior
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;
 }
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 });
+}