diff options
author | Mike Pall <mike> | 2016-04-03 19:12:28 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2016-04-03 19:12:28 +0200 |
commit | 1c6fd13dbd2af1034db935805fd93fbdcdf4f417 (patch) | |
tree | 08edeb6de2d22cf7d72d9518b3d31bc135653b31 | |
parent | 4ab6367b21527a20b76ce356153bc454e082b7d2 (diff) | |
download | luajit-1c6fd13dbd2af1034db935805fd93fbdcdf4f417.tar.gz luajit-1c6fd13dbd2af1034db935805fd93fbdcdf4f417.tar.bz2 luajit-1c6fd13dbd2af1034db935805fd93fbdcdf4f417.zip |
Fix recording of select(n, ...) with off-trace varargs
Thanks to Peter Cawley.
-rw-r--r-- | src/lj_record.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/lj_record.c b/src/lj_record.c index 1bb9461e..9b51c51f 100644 --- a/src/lj_record.c +++ b/src/lj_record.c | |||
@@ -1490,8 +1490,11 @@ static int select_detect(jit_State *J) | |||
1490 | BCIns ins = J->pc[1]; | 1490 | BCIns ins = J->pc[1]; |
1491 | if (bc_op(ins) == BC_CALLM && bc_b(ins) == 2 && bc_c(ins) == 1) { | 1491 | if (bc_op(ins) == BC_CALLM && bc_b(ins) == 2 && bc_c(ins) == 1) { |
1492 | cTValue *func = &J->L->base[bc_a(ins)]; | 1492 | cTValue *func = &J->L->base[bc_a(ins)]; |
1493 | if (tvisfunc(func) && funcV(func)->c.ffid == FF_select) | 1493 | if (tvisfunc(func) && funcV(func)->c.ffid == FF_select) { |
1494 | TRef kfunc = lj_ir_kfunc(J, funcV(func)); | ||
1495 | emitir(IRTG(IR_EQ, IRT_FUNC), getslot(J, bc_a(ins)), kfunc); | ||
1494 | return 1; | 1496 | return 1; |
1497 | } | ||
1495 | } | 1498 | } |
1496 | return 0; | 1499 | return 0; |
1497 | } | 1500 | } |