diff options
author | Mike Pall <mike> | 2023-09-21 02:10:18 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2023-09-21 02:10:18 +0200 |
commit | 92b89d005ab721a61bce6d471b052bcb236b81d7 (patch) | |
tree | 9876a63f7d4b4cc13f114bbff71dac36af73d0e5 | |
parent | d2f6c55b05c716e5dbb479b7e684abaee7cf6e12 (diff) | |
download | luajit-92b89d005ab721a61bce6d471b052bcb236b81d7.tar.gz luajit-92b89d005ab721a61bce6d471b052bcb236b81d7.tar.bz2 luajit-92b89d005ab721a61bce6d471b052bcb236b81d7.zip |
Add missing coercion when recording select(string, ...)
Thanks to Peter Cawley. #1083
-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 dfcc3f65..a49f942a 100644 --- a/src/lj_record.c +++ b/src/lj_record.c | |||
@@ -1570,8 +1570,11 @@ static void rec_varg(jit_State *J, BCReg dst, ptrdiff_t nresults) | |||
1570 | TRef tr = TREF_NIL; | 1570 | TRef tr = TREF_NIL; |
1571 | ptrdiff_t idx = lj_ffrecord_select_mode(J, tridx, &J->L->base[dst-1]); | 1571 | ptrdiff_t idx = lj_ffrecord_select_mode(J, tridx, &J->L->base[dst-1]); |
1572 | if (idx < 0) goto nyivarg; | 1572 | if (idx < 0) goto nyivarg; |
1573 | if (idx != 0 && !tref_isinteger(tridx)) | 1573 | if (idx != 0 && !tref_isinteger(tridx)) { |
1574 | if (tref_isstr(tridx)) | ||
1575 | tridx = emitir(IRTG(IR_STRTO, IRT_NUM), tridx, 0); | ||
1574 | tridx = emitir(IRTGI(IR_CONV), tridx, IRCONV_INT_NUM|IRCONV_INDEX); | 1576 | tridx = emitir(IRTGI(IR_CONV), tridx, IRCONV_INT_NUM|IRCONV_INDEX); |
1577 | } | ||
1575 | if (idx != 0 && tref_isk(tridx)) { | 1578 | if (idx != 0 && tref_isk(tridx)) { |
1576 | emitir(IRTGI(idx <= nvararg ? IR_GE : IR_LT), | 1579 | emitir(IRTGI(idx <= nvararg ? IR_GE : IR_LT), |
1577 | fr, lj_ir_kint(J, frofs+8*(int32_t)idx)); | 1580 | fr, lj_ir_kint(J, frofs+8*(int32_t)idx)); |