aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2023-08-12 22:20:33 +0200
committerMike Pall <mike>2023-08-12 22:20:33 +0200
commitdbed79ea5c90608d738d6d08e65f3ec3a118ab35 (patch)
treee2346ed7ff76cd7ac13692e7f963d33010fac5ee
parent9b544c25efc6d3a3e9391ac7729813c1b7234070 (diff)
parentabb27c7771947e082c9d919d184ad5f5f03e2e32 (diff)
downloadluajit-dbed79ea5c90608d738d6d08e65f3ec3a118ab35.tar.gz
luajit-dbed79ea5c90608d738d6d08e65f3ec3a118ab35.tar.bz2
luajit-dbed79ea5c90608d738d6d08e65f3ec3a118ab35.zip
Merge branch 'master' into v2.1
-rw-r--r--src/lj_parse.c1
-rw-r--r--src/lj_record.c12
2 files changed, 10 insertions, 3 deletions
diff --git a/src/lj_parse.c b/src/lj_parse.c
index 64ae2c16..6663dc6f 100644
--- a/src/lj_parse.c
+++ b/src/lj_parse.c
@@ -2518,6 +2518,7 @@ static int predict_next(LexState *ls, FuncState *fs, BCPos pc)
2518 cTValue *o; 2518 cTValue *o;
2519 switch (bc_op(ins)) { 2519 switch (bc_op(ins)) {
2520 case BC_MOV: 2520 case BC_MOV:
2521 if (bc_d(ins) >= fs->nactvar) return 0;
2521 name = gco2str(gcref(var_get(ls, fs, bc_d(ins)).name)); 2522 name = gco2str(gcref(var_get(ls, fs, bc_d(ins)).name));
2522 break; 2523 break;
2523 case BC_UGET: 2524 case BC_UGET:
diff --git a/src/lj_record.c b/src/lj_record.c
index 33767405..3542e451 100644
--- a/src/lj_record.c
+++ b/src/lj_record.c
@@ -1942,8 +1942,12 @@ static void rec_varg(jit_State *J, BCReg dst, ptrdiff_t nresults)
1942 if (J->framedepth > 0) { /* Simple case: varargs defined on-trace. */ 1942 if (J->framedepth > 0) { /* Simple case: varargs defined on-trace. */
1943 ptrdiff_t i; 1943 ptrdiff_t i;
1944 if (nvararg < 0) nvararg = 0; 1944 if (nvararg < 0) nvararg = 0;
1945 if (nresults == -1) nresults = nvararg; 1945 if (nresults != 1) {
1946 J->maxslot = dst + (BCReg)nresults; 1946 if (nresults == -1) nresults = nvararg;
1947 J->maxslot = dst + (BCReg)nresults;
1948 } else if (dst >= J->maxslot) {
1949 J->maxslot = dst + 1;
1950 }
1947 if (J->baseslot + J->maxslot >= LJ_MAX_JSLOTS) 1951 if (J->baseslot + J->maxslot >= LJ_MAX_JSLOTS)
1948 lj_trace_err(J, LJ_TRERR_STACKOV); 1952 lj_trace_err(J, LJ_TRERR_STACKOV);
1949 for (i = 0; i < nresults; i++) 1953 for (i = 0; i < nresults; i++)
@@ -1973,7 +1977,9 @@ static void rec_varg(jit_State *J, BCReg dst, ptrdiff_t nresults)
1973 } 1977 }
1974 for (i = nvararg; i < nresults; i++) 1978 for (i = nvararg; i < nresults; i++)
1975 J->base[dst+i] = TREF_NIL; 1979 J->base[dst+i] = TREF_NIL;
1976 J->maxslot = dst + (BCReg)nresults; 1980 if (nresults != 1 || dst >= J->maxslot) {
1981 J->maxslot = dst + (BCReg)nresults;
1982 }
1977 } else if (select_detect(J)) { /* y = select(x, ...) */ 1983 } else if (select_detect(J)) { /* y = select(x, ...) */
1978 TRef tridx = J->base[dst-1]; 1984 TRef tridx = J->base[dst-1];
1979 TRef tr = TREF_NIL; 1985 TRef tr = TREF_NIL;