diff --git a/src/lj_ffrecord.c b/src/lj_ffrecord.c index b298d3f7..938c23b6 100644 --- a/src/lj_ffrecord.c +++ b/src/lj_ffrecord.c @@ -259,7 +259,7 @@ static void LJ_FASTCALL recff_setmetatable(jit_State *J, RecordFFData *rd) mtref = tref_isnil(mt) ? lj_ir_knull(J, IRT_TAB) : mt; emitir(IRT(IR_FSTORE, IRT_TAB), fref, mtref); if (!tref_isnil(mt)) - emitir(IRT(IR_TBAR, IRT_TAB), tr, 0); + emitir(IRT(IR_TBAR, IRT_NIL), tr, 0); J->base[0] = tr; J->needsnap = 1; } /* else: Interpreter will throw. */ diff --git a/src/lj_opt_narrow.c b/src/lj_opt_narrow.c index 1172df2b..02fb9e68 100644 --- a/src/lj_opt_narrow.c +++ b/src/lj_opt_narrow.c @@ -341,7 +341,8 @@ static int narrow_conv_backprop(NarrowConv *nc, IRRef ref, int depth) NarrowIns *savesp = nc->sp; int count = narrow_conv_backprop(nc, ir->op1, depth); count += narrow_conv_backprop(nc, ir->op2, depth); - if (count <= 1) { /* Limit total number of conversions. */ + /* Limit total number of conversions. */ + if (count <= 1 && nc->sp < nc->maxsp) { *nc->sp++ = NARROWINS(IRT(ir->o, nc->t), ref); return count; }