diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lj_snap.c | 18 |
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]; |