aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend_proc.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-09-26 11:58:12 +0100
committergingerBill <bill@gingerbill.org>2023-09-26 11:58:12 +0100
commit94d68c1f225c3699d905388baee15e42ec6e49a0 (patch)
treeed716e3807d565c67034010d43e5b430c49dfe63 /src/llvm_backend_proc.cpp
parent0ca379ed03a4f9f57cff250a7bb5980b411aec54 (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.cpp17
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",