aboutsummaryrefslogtreecommitdiff
path: root/src/llvm_backend_proc.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-01-12 16:59:16 +0000
committergingerBill <bill@gingerbill.org>2023-01-12 16:59:16 +0000
commit402a165b60dc9de1ef047b44e47c2d38e5cbed6d (patch)
treed86b969e438e395a17c7a1d3cf2d3e9a46da5fd8 /src/llvm_backend_proc.cpp
parent34f917018980ceca73e9eaacacd44efab2a1448b (diff)
Correct missing procedures in other build modules which cause a linkage problem
Diffstat (limited to 'src/llvm_backend_proc.cpp')
-rw-r--r--src/llvm_backend_proc.cpp14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp
index c66462bc1..fd654cec9 100644
--- a/src/llvm_backend_proc.cpp
+++ b/src/llvm_backend_proc.cpp
@@ -190,11 +190,6 @@ gb_internal lbProcedure *lb_create_procedure(lbModule *m, Entity *entity, bool i
lb_add_attribute_to_proc(m, p->value, "cold");
}
- lbValue proc_value = {p->value, p->type};
- lb_add_entity(m, entity, proc_value);
- lb_add_member(m, p->name, proc_value);
- lb_add_procedure_value(m, p);
-
if (p->is_export) {
LLVMSetLinkage(p->value, LLVMDLLExportLinkage);
LLVMSetDLLStorageClass(p->value, LLVMDLLExportStorageClass);
@@ -202,7 +197,9 @@ gb_internal lbProcedure *lb_create_procedure(lbModule *m, Entity *entity, bool i
lb_set_wasm_export_attributes(p->value, p->name);
} else if (!p->is_foreign) {
- if (!USE_SEPARATE_MODULES) {
+ if (USE_SEPARATE_MODULES) {
+ LLVMSetLinkage(p->value, LLVMExternalLinkage);
+ } else {
LLVMSetLinkage(p->value, LLVMInternalLinkage);
// NOTE(bill): if a procedure is defined in package runtime and uses a custom link name,
@@ -316,6 +313,11 @@ gb_internal lbProcedure *lb_create_procedure(lbModule *m, Entity *entity, bool i
}
}
+ lbValue proc_value = {p->value, p->type};
+ lb_add_entity(m, entity, proc_value);
+ lb_add_member(m, p->name, proc_value);
+ lb_add_procedure_value(m, p);
+
return p;
}