浏览代码

Prevent trace start at BC_ITERL after compiled BC_ITERN.

Reported by ccagml.
Mike Pall 3 年之前
父节点
当前提交
32984282dd
共有 1 个文件被更改,包括 2 次插入0 次删除
  1. 2 0
      src/lj_record.c

+ 2 - 0
src/lj_record.c

@@ -2665,6 +2665,8 @@ static const BCIns *rec_setup_root(jit_State *J)
     J->bc_min = pc;
     J->bc_min = pc;
     break;
     break;
   case BC_ITERL:
   case BC_ITERL:
+    if (bc_op(pc[-1]) == BC_JLOOP)
+      lj_trace_err(J, LJ_TRERR_LINNER);
     lj_assertJ(bc_op(pc[-1]) == BC_ITERC, "no ITERC before ITERL");
     lj_assertJ(bc_op(pc[-1]) == BC_ITERC, "no ITERC before ITERL");
     J->maxslot = ra + bc_b(pc[-1]) - 1;
     J->maxslot = ra + bc_b(pc[-1]) - 1;
     J->bc_extent = (MSize)(-bc_j(ins))*sizeof(BCIns);
     J->bc_extent = (MSize)(-bc_j(ins))*sizeof(BCIns);