diff options
| author | Laytan Laats <laytanlaats@hotmail.com> | 2024-07-01 00:50:10 +0200 |
|---|---|---|
| committer | Laytan Laats <laytanlaats@hotmail.com> | 2024-07-01 00:50:10 +0200 |
| commit | e3dde8caf808eba70f8ebdd9317f05aa75c3bb5a (patch) | |
| tree | db6d6fc625e7768b78000f0379661fc4c3bb5e18 /src | |
| parent | 5637ed9ecdd31929792c59a79d396d24b5bb0ee1 (diff) | |
make structs with multiple fields always return indirect in wasm c abi
Diffstat (limited to 'src')
| -rw-r--r-- | src/llvm_abi.cpp | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/llvm_abi.cpp b/src/llvm_abi.cpp index 1f7a39447..375f1c86a 100644 --- a/src/llvm_abi.cpp +++ b/src/llvm_abi.cpp @@ -1378,14 +1378,14 @@ namespace lbAbiWasm { } else if (lb_is_type_kind(return_type, LLVMStructTypeKind) || lb_is_type_kind(return_type, LLVMArrayTypeKind)) { if (type_can_be_direct(return_type, ft->calling_convention)) { return lb_arg_type_direct(return_type); - } - - i64 sz = lb_sizeof(return_type); - switch (sz) { - case 1: return lb_arg_type_direct(return_type, LLVMIntTypeInContext(c, 8), nullptr, nullptr); - case 2: return lb_arg_type_direct(return_type, LLVMIntTypeInContext(c, 16), nullptr, nullptr); - case 4: return lb_arg_type_direct(return_type, LLVMIntTypeInContext(c, 32), nullptr, nullptr); - case 8: return lb_arg_type_direct(return_type, LLVMIntTypeInContext(c, 64), nullptr, nullptr); + } else if (ft->calling_convention != ProcCC_CDecl) { + i64 sz = lb_sizeof(return_type); + switch (sz) { + case 1: return lb_arg_type_direct(return_type, LLVMIntTypeInContext(c, 8), nullptr, nullptr); + case 2: return lb_arg_type_direct(return_type, LLVMIntTypeInContext(c, 16), nullptr, nullptr); + case 4: return lb_arg_type_direct(return_type, LLVMIntTypeInContext(c, 32), nullptr, nullptr); + case 8: return lb_arg_type_direct(return_type, LLVMIntTypeInContext(c, 64), nullptr, nullptr); + } } LB_ABI_MODIFY_RETURN_IF_TUPLE_MACRO(); |