diff options
author | Mike Pall <mike> | 2021-09-21 13:15:06 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2021-09-21 13:15:06 +0200 |
commit | 1aa4af0b83fa2f1c8fb19ac168b2a06e3d3cea36 (patch) | |
tree | 414da1fb38708d75555d7040f45e2c3eb95aec75 | |
parent | 421c4c798791d27b7f967df39891c4e4fa1d107c (diff) | |
download | luajit-1aa4af0b83fa2f1c8fb19ac168b2a06e3d3cea36.tar.gz luajit-1aa4af0b83fa2f1c8fb19ac168b2a06e3d3cea36.tar.bz2 luajit-1aa4af0b83fa2f1c8fb19ac168b2a06e3d3cea36.zip |
Ensure ITERN forward progress on interpreter bailout.
Reported by Yichun Zhang and ExtReMLapin. #744
-rw-r--r-- | src/lj_record.c | 9 |
1 files 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) | |||
2767 | sidecheck: | 2767 | sidecheck: |
2768 | if ((traceref(J, J->cur.root)->nchild >= J->param[JIT_P_maxside] || | 2768 | if ((traceref(J, J->cur.root)->nchild >= J->param[JIT_P_maxside] || |
2769 | T->snap[J->exitno].count >= J->param[JIT_P_hotexit] + | 2769 | T->snap[J->exitno].count >= J->param[JIT_P_hotexit] + |
2770 | J->param[JIT_P_tryside]) && | 2770 | J->param[JIT_P_tryside])) { |
2771 | !(bc_op(*J->pc) == BC_JLOOP && | 2771 | if (bc_op(*J->pc) == BC_JLOOP) { |
2772 | bc_op(traceref(J, bc_d(*J->pc))->startins) == BC_ITERN)) { | 2772 | BCIns startins = traceref(J, bc_d(*J->pc))->startins; |
2773 | if (bc_op(startins) == BC_ITERN) | ||
2774 | rec_itern(J, bc_a(startins), bc_b(startins)); | ||
2775 | } | ||
2773 | lj_record_stop(J, LJ_TRLINK_INTERP, 0); | 2776 | lj_record_stop(J, LJ_TRLINK_INTERP, 0); |
2774 | } | 2777 | } |
2775 | } else { /* Root trace. */ | 2778 | } else { /* Root trace. */ |