diff --git a/src/codegen.cpp b/src/codegen.cpp index 2f7a25cf93..f5c1019892 100644 --- 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 index 08969e64fe..0c55fb92e7 100644 --- 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 => {}, + } +}