From 6271d10af7f06ff9d740dc9da718d0f59585bea0 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 25 Mar 2021 22:54:49 +0000 Subject: Fix to `OdinLLVMBuildTransmute` to `goto general_end` on different sized data --- src/llvm_backend.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src/llvm_backend.cpp') diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 08b3a3980..c4babd11e 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -2832,10 +2832,12 @@ LLVMValueRef OdinLLVMBuildTransmute(lbProcedure *p, LLVMValueRef val, LLVMTypeRe return LLVMBuildZExtOrBitCast(p->builder, val, dst_type, ""); } - if (src_size != dst_size && (lb_is_type_kind(src_type, LLVMVectorTypeKind) ^ lb_is_type_kind(dst_type, LLVMVectorTypeKind))) { - // Okay - } else { - GB_ASSERT_MSG(src_size == dst_size, "%s == %s", LLVMPrintTypeToString(src_type), LLVMPrintTypeToString(dst_type)); + if (src_size != dst_size) { + if ((lb_is_type_kind(src_type, LLVMVectorTypeKind) ^ lb_is_type_kind(dst_type, LLVMVectorTypeKind))) { + // Okay + } else { + goto general_end; + } } LLVMTypeKind src_kind = LLVMGetTypeKind(src_type); @@ -2856,6 +2858,7 @@ LLVMValueRef OdinLLVMBuildTransmute(lbProcedure *p, LLVMValueRef val, LLVMTypeRe } } +general_end:; if (LLVMIsALoadInst(val) && src_size <= dst_size) { LLVMValueRef val_ptr = LLVMGetOperand(val, 0); val_ptr = LLVMBuildPointerCast(p->builder, val_ptr, LLVMPointerType(dst_type, 0), ""); -- cgit v1.2.3