diff options
| author | Mike Pall <mike> | 2021-09-20 14:40:23 +0200 |
|---|---|---|
| committer | Mike Pall <mike> | 2021-09-20 14:40:23 +0200 |
| commit | 28440544ba7fc494ecc822c37750991a101e41cd (patch) | |
| tree | fa4922a1aad29b55800b06ae301bbb1969613d07 /src | |
| parent | 003f68565d2f06b2ad2029db002e393d020c034c (diff) | |
| download | luajit-28440544ba7fc494ecc822c37750991a101e41cd.tar.gz luajit-28440544ba7fc494ecc822c37750991a101e41cd.tar.bz2 luajit-28440544ba7fc494ecc822c37750991a101e41cd.zip | |
Don't bail out to interpreter to JLOOP originating from ITERN.
Otherwise forward progress is not guaranteed.
Reported by Yichun Zhang.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lj_record.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/lj_record.c b/src/lj_record.c index e51c98ba..7f7a0b63 100644 --- a/src/lj_record.c +++ b/src/lj_record.c | |||
| @@ -2765,9 +2765,11 @@ void lj_record_setup(jit_State *J) | |||
| 2765 | } | 2765 | } |
| 2766 | lj_snap_replay(J, T); | 2766 | lj_snap_replay(J, T); |
| 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 && | ||
| 2772 | bc_op(traceref(J, bc_d(*J->pc))->startins) == BC_ITERN)) { | ||
| 2771 | lj_record_stop(J, LJ_TRLINK_INTERP, 0); | 2773 | lj_record_stop(J, LJ_TRLINK_INTERP, 0); |
| 2772 | } | 2774 | } |
| 2773 | } else { /* Root trace. */ | 2775 | } else { /* Root trace. */ |
