aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend_general.cpp
diff options
context:
space:
mode:
authorLaytan <laytanlaats@hotmail.com>2025-08-01 19:19:23 +0200
committerLaytan <laytanlaats@hotmail.com>2025-08-01 19:27:28 +0200
commit20318e7a3b3ce4e836f70be8305048e0482ab94a (patch)
tree81d6c4c74ee217f60c17040f8176bf793d7b2a6b /src/llvm_backend_general.cpp
parentd0890c2135f236395cf4a412c6e36f48db77cce9 (diff)
concrete types to make llvm 14 happy
Fixes #5463 Fixes #5244 Fixes #5435
Diffstat (limited to 'src/llvm_backend_general.cpp')
-rw-r--r--src/llvm_backend_general.cpp13
1 files changed, 8 insertions, 5 deletions
diff --git a/src/llvm_backend_general.cpp b/src/llvm_backend_general.cpp
index 64ea58578..3ce0c725f 100644
--- a/src/llvm_backend_general.cpp
+++ b/src/llvm_backend_general.cpp
@@ -2584,16 +2584,19 @@ general_end:;
if (src_size > dst_size) {
GB_ASSERT(p->decl_block != p->curr_block);
// NOTE(laytan): src is bigger than dst, need to memcpy the part of src we want.
+
+ LLVMTypeRef llvm_src_type = LLVMPointerType(src_type, 0);
+ LLVMTypeRef llvm_dst_type = LLVMPointerType(dst_type, 0);
LLVMValueRef val_ptr;
if (LLVMIsALoadInst(val)) {
val_ptr = LLVMGetOperand(val, 0);
} else if (LLVMIsAAllocaInst(val)) {
- val_ptr = LLVMBuildPointerCast(p->builder, val, LLVMPointerType(src_type, 0), "");
+ val_ptr = LLVMBuildPointerCast(p->builder, val, llvm_src_type, "");
} else {
// NOTE(laytan): we need a pointer to memcpy from.
LLVMValueRef val_copy = llvm_alloca(p, src_type, src_align);
- val_ptr = LLVMBuildPointerCast(p->builder, val_copy, LLVMPointerType(src_type, 0), "");
+ val_ptr = LLVMBuildPointerCast(p->builder, val_copy, llvm_src_type, "");
LLVMBuildStore(p->builder, val, val_ptr);
}
@@ -2601,11 +2604,11 @@ general_end:;
max_align = gb_max(max_align, 16);
LLVMValueRef ptr = llvm_alloca(p, dst_type, max_align);
- LLVMValueRef nptr = LLVMBuildPointerCast(p->builder, ptr, LLVMPointerType(dst_type, 0), "");
+ LLVMValueRef nptr = LLVMBuildPointerCast(p->builder, ptr, llvm_dst_type, "");
LLVMTypeRef types[3] = {
- lb_type(p->module, t_rawptr),
- lb_type(p->module, t_rawptr),
+ llvm_dst_type,
+ llvm_src_type,
lb_type(p->module, t_int)
};