diff --git a/src/lj_jit.h b/src/lj_jit.h index 7850878d..adb6f2d5 100644 --- a/src/lj_jit.h +++ b/src/lj_jit.h @@ -140,7 +140,7 @@ LJ_STATIC_ASSERT(SNAP_CONT == TREF_CONT); #define snap_slot(sn) ((BCReg)((sn) >> 24)) #define snap_isframe(sn) ((sn) & SNAP_FRAME) #define snap_pc(sn) ((const BCIns *)(uintptr_t)(sn)) -#define snap_setref(sn, ref) (((sn) & 0xffff0000) | (ref)) +#define snap_setref(sn, ref) (((sn) & (0xffff0000&~SNAP_NORESTORE)) | (ref)) /* Snapshot and exit numbers. */ typedef uint32_t SnapNo; diff --git a/src/lj_snap.c b/src/lj_snap.c index fe0389fe..743f05cf 100644 --- a/src/lj_snap.c +++ b/src/lj_snap.c @@ -267,7 +267,7 @@ const BCIns *lj_snap_restore(jit_State *J, void *exptr) } } } - } else { + } else if (!(sn & SNAP_NORESTORE)) { IRType1 t = ir->t; RegSP rs = ir->prev; lua_assert(!(sn & (SNAP_CONT|SNAP_FRAME)));