From 9630660f53ec98703884359fd78766709d9e2b94 Mon Sep 17 00:00:00 2001 From: Mihail Moskov <28909106+corleypc@users.noreply.github.com> Date: Tue, 4 Aug 2026 16:51:04 +0300 Subject: [PATCH] fixes compile error due to no_alias shifting position on procedures with indirect returns --- src/llvm_backend_proc.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index 68215b49a..b26567ba5 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -278,13 +278,17 @@ gb_internal lbProcedure *lb_create_procedure(lbModule *m, Entity *entity, bool i // NOTE(bill): offset==0 is the return value isize offset = 1; - if (pt->Proc.return_by_pointer) { + lbFunctionType *ft = p->abi_function_type; + GB_ASSERT(ft != nullptr); + if (ft->ret.kind == lbArg_Indirect) { + // return by pointer prepends an sret param offset = 2; } - isize parameter_index = 0; if (pt->Proc.param_count) { TypeTuple *params = &pt->Proc.params->Tuple; + isize parameter_index = 0; // 0-based position among the Odin proc params in the LLVM function signature + isize ft_args_index = 0; // index into ft->args for (isize i = 0; i < pt->Proc.param_count; i++) { Entity *e = params->variables[i]; if (e->kind != Entity_Variable) { @@ -295,6 +299,13 @@ gb_internal lbProcedure *lb_create_procedure(lbModule *m, Entity *entity, bool i continue; } + GB_ASSERT(ft_args_index < ft->args.count); + lbArgType *arg = &ft->args[ft_args_index++]; + if (arg->kind == lbArg_Ignore) { + // these are not present in the LLVM function signature, don't advance parameter_index + continue; + } + if (e->flags&EntityFlag_NoAlias) { lb_add_proc_attribute_at_index(p, offset+parameter_index, "noalias"); }