diff --git a/src/lj_record.c b/src/lj_record.c index e283d1e5..42bcca1a 100644 --- a/src/lj_record.c +++ b/src/lj_record.c @@ -1986,6 +1986,7 @@ static void rec_varg(jit_State *J, BCReg dst, ptrdiff_t nresults) if (nresults >= 0) { /* Known fixed number of results. */ ptrdiff_t i; if (nvararg > 0) { + ptrdiff_t nload = nvararg >= nresults ? nresults : nvararg; TRef vbase; if (nvararg >= nresults) emitir(IRTGI(IR_GE), fr, lj_ir_kint(J, frofs+8*(int32_t)nresults)); @@ -1993,7 +1994,7 @@ static void rec_varg(jit_State *J, BCReg dst, ptrdiff_t nresults) emitir(IRTGI(IR_EQ), fr, lj_ir_kint(J, frame_ftsz(J->L->base-1))); vbase = emitir(IRTI(IR_SUB), REF_BASE, fr); vbase = emitir(IRT(IR_ADD, IRT_PTR), vbase, lj_ir_kint(J, frofs-8)); - for (i = 0; i < nvararg; i++) { + for (i = 0; i < nload; i++) { IRType t = itype2irt(&J->L->base[i-1-nvararg]); TRef aref = emitir(IRT(IR_AREF, IRT_PTR), vbase, lj_ir_kint(J, (int32_t)i));