aboutsummaryrefslogtreecommitdiff
path: root/src/Sema.zig
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2022-02-26 15:51:59 -0700
committerAndrew Kelley <andrew@ziglang.org>2022-02-26 16:53:23 -0700
commitaefe4046de9b600bb84cb308ec3afb8f020a2db0 (patch)
tree47c632c569d4f1b86db6fe998c9aa51bb07dc1d6 /src/Sema.zig
parentd62229e3ad6069597b74874ba3b84fc185b2fa4c (diff)
downloadzig-aefe4046de9b600bb84cb308ec3afb8f020a2db0.tar.gz
zig-aefe4046de9b600bb84cb308ec3afb8f020a2db0.zip
Sema: implement `@enumToInt` for unions
Diffstat (limited to 'src/Sema.zig')
-rw-r--r--src/Sema.zig20
1 files changed, 10 insertions, 10 deletions
diff --git a/src/Sema.zig b/src/Sema.zig
index 9789ca8416..d6664f8d84 100644
--- a/src/Sema.zig
+++ b/src/Sema.zig
@@ -5308,16 +5308,16 @@ fn zirEnumToInt(sema: *Sema, block: *Block, inst: Zir.Inst.Index) CompileError!A
const enum_tag: Air.Inst.Ref = switch (operand_ty.zigTypeTag()) {
.Enum => operand,
- .Union => {
- //if (!operand_ty.unionHasTag()) {
- // return sema.fail(
- // block,
- // operand_src,
- // "untagged union '{}' cannot be converted to integer",
- // .{dest_ty_src},
- // );
- //}
- return sema.fail(block, operand_src, "TODO zirEnumToInt for tagged unions", .{});
+ .Union => blk: {
+ const tag_ty = operand_ty.unionTagType() orelse {
+ return sema.fail(
+ block,
+ operand_src,
+ "untagged union '{}' cannot be converted to integer",
+ .{src},
+ );
+ };
+ break :blk try sema.unionToTag(block, tag_ty, operand, operand_src);
},
else => {
return sema.fail(block, operand_src, "expected enum or tagged union, found {}", .{