From d3c65b6ba534b23be92333a2f7cec8a56e26e5c2 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 24 Nov 2022 13:16:02 +0000 Subject: Make split multiple return logic only work for the native Odin calling conventions --- src/llvm_abi.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'src/llvm_abi.cpp') 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; } -- cgit v1.2.3