aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2020-06-03 21:23:30 +0100
committergingerBill <bill@gingerbill.org>2020-06-03 21:23:30 +0100
commit37a3abdaaa0daa3fca0f8b649f67f069ca54443a (patch)
tree7d5980995f84e01b0c2f263657f18bce53760145 /src
parentac709b8afb788c795f7cdb1ccfeb2bfe55f2df51 (diff)
Fix calling convention stuff with LLVM C API
Diffstat (limited to 'src')
-rw-r--r--src/llvm_backend.cpp10
-rw-r--r--src/llvm_backend.hpp1
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,