Commit dbd44658ff

Andrew Kelley <andrew@ziglang.org>
2023-05-26 22:16:33
wasm backend: emit a TODO error rather than miscompile
1 parent 8f5f809
Changed files (1)
src
arch
src/arch/wasm/CodeGen.zig
@@ -3090,9 +3090,14 @@ fn lowerConstant(func: *CodeGen, arg_val: Value, ty: Type) InnerError!WValue {
         },
         .ErrorUnion => {
             const error_type = ty.errorUnionSet();
-            const is_pl = val.errorUnionIsPayload();
-            const err_val = if (!is_pl) val else Value.initTag(.zero);
-            return func.lowerConstant(err_val, error_type);
+            const payload_type = ty.errorUnionPayload();
+            if (!payload_type.hasRuntimeBitsIgnoreComptime()) {
+                // We use the error type directly as the type.
+                const is_pl = val.errorUnionIsPayload();
+                const err_val = if (!is_pl) val else Value.initTag(.zero);
+                return func.lowerConstant(err_val, error_type);
+            }
+            return func.fail("Wasm TODO: lowerConstant error union with non-zero-bit payload type", .{});
         },
         .Optional => if (ty.optionalReprIsPayload()) {
             var buf: Type.Payload.ElemType = undefined;