diff options
| author | gingerBill <gingerBill@users.noreply.github.com> | 2025-09-29 12:27:28 +0100 |
|---|---|---|
| committer | gingerBill <gingerBill@users.noreply.github.com> | 2025-09-29 12:27:28 +0100 |
| commit | b711e9296868accd2a1ca889db60dc54ecd46c75 (patch) | |
| tree | 0a69e20bcb6d08791b6582bec4cf84b90f3bc4a7 /src/llvm_backend_proc.cpp | |
| parent | 89645921e2653b533131b9a292ffd3fb0195e8b5 (diff) | |
Add bit cast
Diffstat (limited to 'src/llvm_backend_proc.cpp')
| -rw-r--r-- | src/llvm_backend_proc.cpp | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index 19213e1a3..926401657 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -921,13 +921,20 @@ gb_internal lbValue lb_emit_call_internal(lbProcedure *p, lbValue value, lbValue arg_type != param_type) { LLVMTypeKind arg_kind = LLVMGetTypeKind(arg_type); LLVMTypeKind param_kind = LLVMGetTypeKind(param_type); - if (arg_kind == param_kind && - arg_kind == LLVMPointerTypeKind) { - // NOTE(bill): LLVM's newer `ptr` only type system seems to fail at times - // I don't know why... - args[i] = LLVMBuildPointerCast(p->builder, args[i], param_type, ""); - arg_type = param_type; - continue; + if (arg_kind == param_kind) { + if (arg_kind == LLVMPointerTypeKind) { + // NOTE(bill): LLVM's newer `ptr` only type system seems to fail at times + // I don't know why... + args[i] = LLVMBuildPointerCast(p->builder, args[i], param_type, ""); + arg_type = param_type; + continue; + } else if (arg_kind == LLVMStructTypeKind) { + if (lb_sizeof(arg_type) == lb_sizeof(param_type)) { + args[i] = LLVMBuildBitCast(p->builder, args[i], param_type, ""); + arg_type = param_type; + continue; + } + } } } |