diff options
| author | Mike Pall <mike> | 2024-01-23 19:01:46 +0100 |
|---|---|---|
| committer | Mike Pall <mike> | 2024-01-23 19:01:46 +0100 |
| commit | f2336c48fa15fe6e166d345ce9ad6a310613107e (patch) | |
| tree | c955bee104944be5473d13dc7969ed11366e2643 /src | |
| parent | 3ca0a80711ef53e2e788bca7b282f8ad7c927b59 (diff) | |
| parent | 85b4fed0b0353dd78c8c875c2f562d522a2b310f (diff) | |
| download | luajit-f2336c48fa15fe6e166d345ce9ad6a310613107e.tar.gz luajit-f2336c48fa15fe6e166d345ce9ad6a310613107e.tar.bz2 luajit-f2336c48fa15fe6e166d345ce9ad6a310613107e.zip | |
Merge branch 'master' into v2.1
Diffstat (limited to 'src')
| -rw-r--r-- | src/lj_snap.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/lj_snap.c b/src/lj_snap.c index 7d7347a1..f3645e87 100644 --- a/src/lj_snap.c +++ b/src/lj_snap.c | |||
| @@ -453,6 +453,7 @@ static TRef snap_replay_const(jit_State *J, IRIns *ir) | |||
| 453 | case IR_KNUM: case IR_KINT64: | 453 | case IR_KNUM: case IR_KINT64: |
| 454 | return lj_ir_k64(J, (IROp)ir->o, ir_k64(ir)->u64); | 454 | return lj_ir_k64(J, (IROp)ir->o, ir_k64(ir)->u64); |
| 455 | case IR_KPTR: return lj_ir_kptr(J, ir_kptr(ir)); /* Continuation. */ | 455 | case IR_KPTR: return lj_ir_kptr(J, ir_kptr(ir)); /* Continuation. */ |
| 456 | case IR_KNULL: return lj_ir_knull(J, irt_type(ir->t)); | ||
| 456 | default: lj_assertJ(0, "bad IR constant op %d", ir->o); return TREF_NIL; | 457 | default: lj_assertJ(0, "bad IR constant op %d", ir->o); return TREF_NIL; |
| 457 | } | 458 | } |
| 458 | } | 459 | } |
| @@ -902,9 +903,13 @@ static void snap_unsink(jit_State *J, GCtrace *T, ExitState *ex, | |||
| 902 | if (irk->o == IR_FREF) { | 903 | if (irk->o == IR_FREF) { |
| 903 | switch (irk->op2) { | 904 | switch (irk->op2) { |
| 904 | case IRFL_TAB_META: | 905 | case IRFL_TAB_META: |
| 905 | snap_restoreval(J, T, ex, snapno, rfilt, irs->op2, &tmp); | 906 | if (T->ir[irs->op2].o == IR_KNULL) { |
| 906 | /* NOBARRIER: The table is new (marked white). */ | 907 | setgcrefnull(t->metatable); |
| 907 | setgcref(t->metatable, obj2gco(tabV(&tmp))); | 908 | } else { |
| 909 | snap_restoreval(J, T, ex, snapno, rfilt, irs->op2, &tmp); | ||
| 910 | /* NOBARRIER: The table is new (marked white). */ | ||
| 911 | setgcref(t->metatable, obj2gco(tabV(&tmp))); | ||
| 912 | } | ||
| 908 | break; | 913 | break; |
| 909 | case IRFL_TAB_NOMM: | 914 | case IRFL_TAB_NOMM: |
| 910 | /* Negative metamethod cache invalidated by lj_tab_set() below. */ | 915 | /* Negative metamethod cache invalidated by lj_tab_set() below. */ |
