diff options
| author | gingerBill <bill@gingerbill.org> | 2023-09-26 11:58:12 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2023-09-26 11:58:12 +0100 |
| commit | 94d68c1f225c3699d905388baee15e42ec6e49a0 (patch) | |
| tree | ed716e3807d565c67034010d43e5b430c49dfe63 /src/llvm_backend_proc.cpp | |
| parent | 0ca379ed03a4f9f57cff250a7bb5980b411aec54 (diff) | |
Fix `ptr != ptr` type cast problem in LLVM 17
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", |