From c1e327c5662b0e752c0a404f447848ca438743da Mon Sep 17 00:00:00 2001 From: bingis-khan <52740618+bingis-khan@users.noreply.github.com> Date: Sun, 26 Jul 2026 11:11:36 +0200 Subject: [PATCH] Fix LLVM codegen for matching on `nil` for `union{}` --- src/llvm_backend_stmt.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/llvm_backend_stmt.cpp b/src/llvm_backend_stmt.cpp index 54447820a..1d42b497a 100644 --- a/src/llvm_backend_stmt.cpp +++ b/src/llvm_backend_stmt.cpp @@ -2201,7 +2201,9 @@ gb_internal void lb_build_type_switch_stmt(lbProcedure *p, AstTypeSwitchStmt *ss LLVMValueRef switch_instr = nullptr; if (type_size_of(parent_base_type) == 0) { GB_ASSERT(tag.value == nullptr); - switch_instr = LLVMBuildSwitch(p->builder, lb_const_bool(p->module, t_llvm_bool, false).value, else_block->block, cast(unsigned)num_cases); + GB_ASSERT(switch_kind == TypeSwitch_Union); // zero size only possible for union{} + Type *ut = type_deref(parent.type); + switch_instr = LLVMBuildSwitch(p->builder, lb_const_int(m, union_tag_type(ut), 0).value, else_block->block, cast(unsigned)num_cases); } else { GB_ASSERT(tag.value != nullptr); switch_instr = LLVMBuildSwitch(p->builder, tag.value, else_block->block, cast(unsigned)num_cases);