From 9b51e7085b79f712aef1e1761fe351658a0b07a3 Mon Sep 17 00:00:00 2001 From: Wolfgang Bumiller Date: Fri, 25 Jan 2013 16:25:23 +0100 Subject: [PATCH] In this situation the values don't need to be in parameter order; fix: call-stores putting values into wrong extparams --- ir.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/ir.c b/ir.c index 38882ec..ad86914 100644 --- a/ir.c +++ b/ir.c @@ -2257,18 +2257,22 @@ bool ir_function_allocate_locals(ir_function *self) irerror(call->context, "internal error: unlocked parameter %s not found", v->name); goto error; } - ++opts_optimizationcount[OPTIM_CALL_STORES]; v->callparam = true; if (param < 8) ir_value_code_setaddr(v, OFS_PARM0 + 3*param); else { + size_t nprotos = vec_size(self->owner->extparam_protos); ir_value *ep; param -= 8; - if (vec_size(self->owner->extparam_protos) <= param) - ep = ir_gen_extparam_proto(self->owner); - else + if (nprotos > param) ep = self->owner->extparam_protos[param]; + else + { + ep = ir_gen_extparam_proto(self->owner); + while (++nprotos <= param) + ep = ir_gen_extparam_proto(self->owner); + } ir_instr_op(v->writes[0], 0, ep, true); call->params[param+8] = ep; } -- 2.39.2