diff options
Diffstat (limited to 'src/llvm_backend_proc.cpp')
| -rw-r--r-- | src/llvm_backend_proc.cpp | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index 795f2fdd3..3b145b09d 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -864,8 +864,21 @@ gb_internal lbValue lb_emit_call_internal(lbProcedure *p, lbValue value, lbValue for (unsigned i = 0; i < param_count; i++) { LLVMTypeRef param_type = param_types[i]; LLVMTypeRef arg_type = LLVMTypeOf(args[i]); - // LLVMTypeKind param_kind = LLVMGetTypeKind(param_type); - // LLVMTypeKind arg_kind = LLVMGetTypeKind(arg_type); + if (LB_USE_NEW_PASS_SYSTEM && + 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, ""); + gb_printf_err("%s\n", LLVMPrintValueToString(args[i])); + arg_type = param_type; + continue; + } + } + GB_ASSERT_MSG( arg_type == param_type, "Parameter types do not match: %s != %s, argument: %s\n\t%s", |