]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
Ensure ITERN forward progress on interpreter bailout.
authorMike Pall <mike>
Tue, 21 Sep 2021 11:15:06 +0000 (13:15 +0200)
committerMike Pall <mike>
Tue, 21 Sep 2021 11:15:06 +0000 (13:15 +0200)
Reported by Yichun Zhang and ExtReMLapin. #744

src/lj_record.c

index 7f7a0b63b2b9e9a068c8543ab08f70fbddbff6b6..4fe1a05651da5e136a57a1bf1826ff456a41993e 100644 (file)
@@ -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. */