From: Mike Pall Date: Sun, 10 Dec 2023 13:33:48 +0000 (+0100) Subject: Merge branch 'master' into v2.1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7ad68a1fd34dbd81a62d5fe915ae8b806ea6e213;p=thirdparty%2FLuaJIT.git Merge branch 'master' into v2.1 --- 7ad68a1fd34dbd81a62d5fe915ae8b806ea6e213 diff --cc src/lj_snap.c index 68de208f,5a5c481b..93eb8a29 --- a/src/lj_snap.c +++ b/src/lj_snap.c @@@ -624,6 -575,17 +624,21 @@@ void lj_snap_replay(jit_State *J, GCtra if (irr->o == IR_HREFK || irr->o == IR_AREF) { IRIns *irf = &T->ir[irr->op1]; tmp = emitir(irf->ot, tmp, irf->op2); + } else if (irr->o == IR_NEWREF) { + IRRef allocref = tref_ref(tr); + IRRef keyref = tref_ref(key); + IRRef newref_ref = J->chain[IR_NEWREF]; + IRIns *newref = &J->cur.ir[newref_ref]; - lua_assert(irref_isk(keyref)); ++ lj_assertJ(irref_isk(keyref), ++ "sunk store for parent IR %04d with bad key %04d", ++ refp - REF_BIAS, keyref - REF_BIAS); + if (newref_ref > allocref && newref->op2 == keyref) { - lua_assert(newref->op1 == allocref); ++ lj_assertJ(newref->op1 == allocref, ++ "sunk store for parent IR %04d with bad tab %04d", ++ refp - REF_BIAS, allocref - REF_BIAS); + tmp = newref_ref; + goto skip_newref; + } } } tmp = emitir(irr->ot, tmp, key);