zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit ffb3b1576b1c02942bce89ef05eaf05fe2f026ac (tree)
parent c87a576cb5afaf54e68bae10119305af71aaa3a1
Author: Andrew Kelley <superjoe30@gmail.com>
Date:   Wed,  5 Sep 2018 16:19:58 -0400

stage1: fix tagged union with no payloads

closes #1478

Diffstat:
Msrc/codegen.cpp | 2+-
Mtest/cases/union.zig | 13+++++++++++++
2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/codegen.cpp b/src/codegen.cpp @@ -5490,7 +5490,7 @@ static LLVMValueRef gen_const_val(CodeGen *g, ConstExprValue *const_val, const c LLVMTypeRef union_type_ref = type_entry->data.unionation.union_type_ref; if (type_entry->data.unionation.gen_field_count == 0) { - if (type_entry->data.unionation.gen_tag_index == SIZE_MAX) { + if (type_entry->data.unionation.tag_type == nullptr) { return nullptr; } else { return bigint_to_llvm_const(type_entry->data.unionation.tag_type->type_ref, diff --git a/test/cases/union.zig b/test/cases/union.zig @@ -311,3 +311,16 @@ fn testTaggedUnionInit(x: var) bool { const y = TaggedUnionWithAVoid{ .A = x }; return @TagType(TaggedUnionWithAVoid)(y) == TaggedUnionWithAVoid.A; } + +pub const UnionEnumNoPayloads = union(enum) { + A, + B, +}; + +test "tagged union with no payloads" { + const a = UnionEnumNoPayloads{ .B = {} }; + switch (a) { + @TagType(UnionEnumNoPayloads).A => @panic("wrong"), + @TagType(UnionEnumNoPayloads).B => {}, + } +}