aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2022-11-24 13:16:02 +0000
committergingerBill <bill@gingerbill.org>2022-11-24 13:16:02 +0000
commitd3c65b6ba534b23be92333a2f7cec8a56e26e5c2 (patch)
tree29933ac32e100f7838aa9a7607cf139b03944b95 /src
parent90415e4a6e187c88dda64508f0b69292250da6b8 (diff)
Make split multiple return logic only work for the native Odin calling conventions
Diffstat (limited to 'src')
-rw-r--r--src/llvm_abi.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/llvm_abi.cpp b/src/llvm_abi.cpp
index 13452ca27..c35affad5 100644
--- a/src/llvm_abi.cpp
+++ b/src/llvm_abi.cpp
@@ -1450,11 +1450,21 @@ LB_ABI_INFO(lb_get_abi_info_internal) {
LB_ABI_INFO(lb_get_abi_info) {
- lbFunctionType *ft = lb_get_abi_info_internal(c, arg_types, arg_count, return_type, return_is_defined, ALLOW_SPLIT_MULTI_RETURNS && return_is_tuple, calling_convention);
+ lbFunctionType *ft = lb_get_abi_info_internal(
+ c,
+ arg_types, arg_count,
+ return_type, return_is_defined,
+ ALLOW_SPLIT_MULTI_RETURNS && return_is_tuple && is_calling_convention_odin(calling_convention),
+ calling_convention);
+
+
+ // NOTE(bill): this is handled here rather than when developing the type in `lb_type_internal_for_procedures_raw`
+ // This is to make it consistent when and how it is handled
if (calling_convention == ProcCC_Odin) {
// append the `context` pointer
lbArgType context_param = lb_arg_type_direct(LLVMPointerType(LLVMInt8TypeInContext(c), 0));
array_add(&ft->args, context_param);
}
+
return ft;
}