From 1aa4af0b83fa2f1c8fb19ac168b2a06e3d3cea36 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Tue, 21 Sep 2021 13:15:06 +0200 Subject: [PATCH] Ensure ITERN forward progress on interpreter bailout. Reported by Yichun Zhang and ExtReMLapin. #744 --- src/lj_record.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/lj_record.c b/src/lj_record.c index 7f7a0b63..4fe1a056 100644 --- a/src/lj_record.c +++ b/src/lj_record.c @@ -2767,9 +2767,12 @@ void lj_record_setup(jit_State *J) sidecheck: if ((traceref(J, J->cur.root)->nchild >= J->param[JIT_P_maxside] || T->snap[J->exitno].count >= J->param[JIT_P_hotexit] + - J->param[JIT_P_tryside]) && - !(bc_op(*J->pc) == BC_JLOOP && - bc_op(traceref(J, bc_d(*J->pc))->startins) == BC_ITERN)) { + J->param[JIT_P_tryside])) { + if (bc_op(*J->pc) == BC_JLOOP) { + BCIns startins = traceref(J, bc_d(*J->pc))->startins; + if (bc_op(startins) == BC_ITERN) + rec_itern(J, bc_a(startins), bc_b(startins)); + } lj_record_stop(J, LJ_TRLINK_INTERP, 0); } } else { /* Root trace. */