diff --git a/src/lj_snap.c b/src/lj_snap.c index b9a82008..0aab7e78 100644 --- a/src/lj_snap.c +++ b/src/lj_snap.c @@ -662,6 +662,10 @@ static void snap_restoredata(GCtrace *T, ExitState *ex, rs = snap_renameref(T, snapno, ref, rs); if (ra_hasspill(regsp_spill(rs))) { src = &ex->spill[regsp_spill(rs)]; + if (sz == 8 && !irt_is64(ir->t)) { + tmp = (uint64_t)(uint32_t)*src; + src = (int32_t *)&tmp; + } } else { Reg r = regsp_reg(rs); if (ra_noreg(r)) {