From: Wolfgang Bumiller Date: Fri, 25 Jan 2013 15:25:23 +0000 (+0100) Subject: In this situation the values don't need to be in parameter order; fix: call-stores... X-Git-Tag: before-library~221 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=9b51e7085b79f712aef1e1761fe351658a0b07a3;p=xonotic%2Fgmqcc.git In this situation the values don't need to be in parameter order; fix: call-stores putting values into wrong extparams --- 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; }