summaryrefslogtreecommitdiff
path: root/src/lj_record.c
diff options
context:
space:
mode:
authorMike Pall <mike>2010-09-12 03:14:17 +0200
committerMike Pall <mike>2010-09-12 03:14:17 +0200
commit52f75e9a5c5cc2fad846adae8873b572bafde4c2 (patch)
treeac9c67f89a229dd336757243687fbabdc7b24504 /src/lj_record.c
parent4da03965c0dfe30a386390f5f419739e5f06779b (diff)
downloadluajit-52f75e9a5c5cc2fad846adae8873b572bafde4c2.tar.gz
luajit-52f75e9a5c5cc2fad846adae8873b572bafde4c2.tar.bz2
luajit-52f75e9a5c5cc2fad846adae8873b572bafde4c2.zip
Fix off-by-one errors in maxslot calculation of trace recorder.
Diffstat (limited to 'src/lj_record.c')
-rw-r--r--src/lj_record.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/lj_record.c b/src/lj_record.c
index 2bb1c2c8..f82468f0 100644
--- a/src/lj_record.c
+++ b/src/lj_record.c
@@ -628,7 +628,7 @@ static void rec_ret(jit_State *J, BCReg rbase, ptrdiff_t gotresults)
628 /* Copy result to destination slot. */ 628 /* Copy result to destination slot. */
629 BCReg dst = bc_a(*(frame_contpc(frame)-1)); 629 BCReg dst = bc_a(*(frame_contpc(frame)-1));
630 J->base[dst] = gotresults ? J->base[cbase+rbase] : TREF_NIL; 630 J->base[dst] = gotresults ? J->base[cbase+rbase] : TREF_NIL;
631 if (dst > J->maxslot) J->maxslot = dst+1; 631 if (dst >= J->maxslot) J->maxslot = dst+1;
632 } else if (cont == lj_cont_nop) { 632 } else if (cont == lj_cont_nop) {
633 /* Nothing to do here. */ 633 /* Nothing to do here. */
634 } else if (cont == lj_cont_cat) { 634 } else if (cont == lj_cont_cat) {
@@ -659,7 +659,7 @@ static void rec_varg(jit_State *J, BCReg dst, ptrdiff_t nresults)
659 nresults = nvararg; 659 nresults = nvararg;
660 J->maxslot = dst + nvararg; 660 J->maxslot = dst + nvararg;
661 } else if (dst + nresults > J->maxslot) { 661 } else if (dst + nresults > J->maxslot) {
662 J->maxslot = dst + nresults + 1; 662 J->maxslot = dst + nresults;
663 } 663 }
664 for (i = 0; i < nresults; i++) 664 for (i = 0; i < nresults; i++)
665 J->base[dst+i] = i < nvararg ? J->base[i - nvararg - 1] : TREF_NIL; 665 J->base[dst+i] = i < nvararg ? J->base[i - nvararg - 1] : TREF_NIL;