aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2023-08-28 22:24:36 +0200
committerMike Pall <mike>2023-08-28 22:24:36 +0200
commitc0d5240a25f2229e9b2d833eb94bccf3f2d5c568 (patch)
treefb7bf38d14e0ce82fba1ee146874e93684783c24 /src
parent238a2a80bb17187e2cc439f99a6225953b577b3e (diff)
parent0ef51b495f9497aac77b41eb3d837c9c38b9424b (diff)
downloadluajit-c0d5240a25f2229e9b2d833eb94bccf3f2d5c568.tar.gz
luajit-c0d5240a25f2229e9b2d833eb94bccf3f2d5c568.tar.bz2
luajit-c0d5240a25f2229e9b2d833eb94bccf3f2d5c568.zip
Merge branch 'master' into v2.1
Diffstat (limited to 'src')
-rw-r--r--src/lj_snap.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/lj_snap.c b/src/lj_snap.c
index 877ce099..68de208f 100644
--- a/src/lj_snap.c
+++ b/src/lj_snap.c
@@ -880,11 +880,19 @@ static void snap_unsink(jit_State *J, GCtrace *T, ExitState *ex,
880 irs->o == IR_FSTORE, 880 irs->o == IR_FSTORE,
881 "sunk store with bad op %d", irs->o); 881 "sunk store with bad op %d", irs->o);
882 if (irk->o == IR_FREF) { 882 if (irk->o == IR_FREF) {
883 lj_assertJ(irk->op2 == IRFL_TAB_META, 883 switch (irk->op2) {
884 "sunk store with bad field %d", irk->op2); 884 case IRFL_TAB_META:
885 snap_restoreval(J, T, ex, snapno, rfilt, irs->op2, &tmp); 885 snap_restoreval(J, T, ex, snapno, rfilt, irs->op2, &tmp);
886 /* NOBARRIER: The table is new (marked white). */ 886 /* NOBARRIER: The table is new (marked white). */
887 setgcref(t->metatable, obj2gco(tabV(&tmp))); 887 setgcref(t->metatable, obj2gco(tabV(&tmp)));
888 break;
889 case IRFL_TAB_NOMM:
890 /* Negative metamethod cache invalidated by lj_tab_set() below. */
891 break;
892 default:
893 lj_assertJ(0, "sunk store with bad field %d", irk->op2);
894 break;
895 }
888 } else { 896 } else {
889 irk = &T->ir[irk->op2]; 897 irk = &T->ir[irk->op2];
890 if (irk->o == IR_KSLOT) irk = &T->ir[irk->op1]; 898 if (irk->o == IR_KSLOT) irk = &T->ir[irk->op1];