]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
Add missing coercion when recording select(string, ...)
authorMike Pall <mike>
Thu, 21 Sep 2023 00:10:18 +0000 (02:10 +0200)
committerMike Pall <mike>
Thu, 21 Sep 2023 00:10:18 +0000 (02:10 +0200)
Thanks to Peter Cawley. #1083

src/lj_record.c

index dfcc3f65b960311f48e01b06152dd48aa9581629..a49f942aabb1649a376cec017c4ce4becceebfef 100644 (file)
@@ -1570,8 +1570,11 @@ static void rec_varg(jit_State *J, BCReg dst, ptrdiff_t nresults)
       TRef tr = TREF_NIL;
       ptrdiff_t idx = lj_ffrecord_select_mode(J, tridx, &J->L->base[dst-1]);
       if (idx < 0) goto nyivarg;
-      if (idx != 0 && !tref_isinteger(tridx))
+      if (idx != 0 && !tref_isinteger(tridx)) {
+       if (tref_isstr(tridx))
+         tridx = emitir(IRTG(IR_STRTO, IRT_NUM), tridx, 0);
        tridx = emitir(IRTGI(IR_CONV), tridx, IRCONV_INT_NUM|IRCONV_INDEX);
+      }
       if (idx != 0 && tref_isk(tridx)) {
        emitir(IRTGI(idx <= nvararg ? IR_GE : IR_LT),
               fr, lj_ir_kint(J, frofs+8*(int32_t)idx));