aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgingerBill <gingerBill@users.noreply.github.com>2024-04-04 18:09:12 +0100
committerGitHub <noreply@github.com>2024-04-04 18:09:12 +0100
commitfbff2b4fd6a1a4b780b14f4fd9e77e2abfc43962 (patch)
treedfb9addcf8f7c5a8f592c9c9063b5a4c6316f5cb
parent7f0ca315b3261bb323260018d08b868a0b313c35 (diff)
parenta7056f2b4f8ac7c5fe78b00cbae686da4867e206 (diff)
Merge pull request #3372 from laytan/fix-lbarg-ignore-logic
fix lbArg_Ignore logic
-rw-r--r--src/llvm_abi.cpp2
-rw-r--r--src/llvm_backend_proc.cpp6
2 files changed, 6 insertions, 2 deletions
diff --git a/src/llvm_abi.cpp b/src/llvm_abi.cpp
index 507881f99..4cee0e443 100644
--- a/src/llvm_abi.cpp
+++ b/src/llvm_abi.cpp
@@ -192,7 +192,7 @@ gb_internal void lb_add_function_type_attributes(LLVMValueRef fn, lbFunctionType
// }
LLVMSetFunctionCallConv(fn, cc_kind);
if (calling_convention == ProcCC_Odin) {
- unsigned context_index = offset+arg_count;
+ unsigned context_index = arg_index;
LLVMAddAttributeAtIndex(fn, context_index, noalias_attr);
LLVMAddAttributeAtIndex(fn, context_index, nonnull_attr);
LLVMAddAttributeAtIndex(fn, context_index, nocapture_attr);
diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp
index 2c79499f4..8ce116715 100644
--- a/src/llvm_backend_proc.cpp
+++ b/src/llvm_backend_proc.cpp
@@ -578,7 +578,10 @@ gb_internal void lb_begin_procedure_body(lbProcedure *p) {
defer (param_index += 1);
if (arg_type->kind == lbArg_Ignore) {
- continue;
+ // Even though it is an ignored argument, it might still be referenced in the
+ // body.
+ lbValue dummy = lb_add_local_generated(p, e->type, false).addr;
+ lb_add_entity(p->module, e, dummy);
} else if (arg_type->kind == lbArg_Direct) {
if (e->token.string.len != 0 && !is_blank_ident(e->token.string)) {
LLVMTypeRef param_type = lb_type(p->module, e->type);
@@ -1051,6 +1054,7 @@ gb_internal lbValue lb_emit_call(lbProcedure *p, lbValue value, Array<lbValue> c
Type *original_type = e->type;
lbArgType *arg = &ft->args[param_index];
if (arg->kind == lbArg_Ignore) {
+ param_index += 1;
continue;
}