diff options
| author | gingerBill <bill@gingerbill.org> | 2020-06-03 21:23:30 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2020-06-03 21:23:30 +0100 |
| commit | 37a3abdaaa0daa3fca0f8b649f67f069ca54443a (patch) | |
| tree | 7d5980995f84e01b0c2f263657f18bce53760145 /src | |
| parent | ac709b8afb788c795f7cdb1ccfeb2bfe55f2df51 (diff) | |
Fix calling convention stuff with LLVM C API
Diffstat (limited to 'src')
| -rw-r--r-- | src/llvm_backend.cpp | 10 | ||||
| -rw-r--r-- | src/llvm_backend.hpp | 1 |
2 files changed, 8 insertions, 3 deletions
diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index be0b09372..e5058983f 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -2032,7 +2032,7 @@ lbProcedure *lb_create_procedure(lbModule *m, Entity *entity) { if (build_context.metrics.os != TargetOs_js) { cc_kind = lb_calling_convention_map[pt->Proc.calling_convention]; } - LLVMSetFunctionCallConv(p->value, lb_calling_convention_map[pt->Proc.calling_convention]); + LLVMSetFunctionCallConv(p->value, cc_kind); lbValue proc_value = {p->value, p->type}; lb_add_entity(m, entity, proc_value); lb_add_member(m, p->name, proc_value); @@ -2172,8 +2172,12 @@ lbProcedure *lb_create_dummy_procedure(lbModule *m, String link_name, Type *type p->value = LLVMAddFunction(m->mod, c_link_name, func_type); Type *pt = p->type; - - LLVMSetFunctionCallConv(p->value, lb_calling_convention_map[pt->Proc.calling_convention]); + lbCallingConventionKind cc_kind = lbCallingConvention_C; + // TODO(bill): Clean up this logic + if (build_context.metrics.os != TargetOs_js) { + cc_kind = lb_calling_convention_map[pt->Proc.calling_convention]; + } + LLVMSetFunctionCallConv(p->value, cc_kind); lbValue proc_value = {p->value, p->type}; lb_add_member(m, p->name, proc_value); lb_add_procedure_value(m, p); diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp index d18ecc2c3..46d1947fe 100644 --- a/src/llvm_backend.hpp +++ b/src/llvm_backend.hpp @@ -415,6 +415,7 @@ lbCallingConventionKind const lb_calling_convention_map[ProcCC_MAX] = { lbCallingConvention_C, // ProcCC_Invalid, lbCallingConvention_C, // ProcCC_Odin, lbCallingConvention_C, // ProcCC_Contextless, + lbCallingConvention_C, // ProcCC_Pure, lbCallingConvention_C, // ProcCC_CDecl, lbCallingConvention_X86_StdCall, // ProcCC_StdCall, lbCallingConvention_X86_FastCall, // ProcCC_FastCall, |