From 28a43fd4f749a95f88151e944b089d1d7905ab69 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 30 Jun 2026 11:49:35 +0100 Subject: [PATCH] Short-circuit further for constant unions in the LLVM constant literal syntax --- src/llvm_backend_const.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/llvm_backend_const.cpp b/src/llvm_backend_const.cpp index 9a88f57a6..4d982bd4f 100644 --- a/src/llvm_backend_const.cpp +++ b/src/llvm_backend_const.cpp @@ -118,7 +118,7 @@ gb_internal LLVMValueRef llvm_const_cast(lbModule *m, LLVMValueRef val, LLVMType if (src_n != dst_n) goto failure; if (LLVM_VERSION_MAJOR > 14) { - return val; + goto failure; } LLVMValueRef *field_vals = temporary_alloc_array(dst_n); @@ -129,6 +129,10 @@ gb_internal LLVMValueRef llvm_const_cast(lbModule *m, LLVMValueRef val, LLVMType LLVMTypeRef dst_elem_ty = LLVMStructGetTypeAtIndex(dst, i); LLVMTypeRef src_elem_ty = LLVMTypeOf(field_val); + if (lb_sizeof(dst_elem_ty) != lb_sizeof(src_elem_ty)) { + goto failure; + } + GB_ASSERT_MSG(lb_sizeof(dst_elem_ty) == lb_sizeof(src_elem_ty), "dst:%s vs src:%s (dst:%lld vs src:%lld) to %s from %s", LLVMPrintTypeToString(dst_elem_ty), LLVMPrintTypeToString(src_elem_ty), cast(long long)lb_sizeof(dst_elem_ty), cast(long long)lb_sizeof(src_elem_ty),