]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
Fix canonicalization of +-0.0 keys for IR_NEWREF.
authorMike Pall <mike>
Sun, 16 Apr 2023 11:24:08 +0000 (13:24 +0200)
committerMike Pall <mike>
Sun, 16 Apr 2023 11:24:08 +0000 (13:24 +0200)
Reported by Sergey Kaplun. #981

src/lj_record.c

index dee533278e151c9cdfc95e06487b9ff6709b3c85..10a14a6f87c505822098624f5200deae88a9366a 100644 (file)
@@ -1256,6 +1256,8 @@ TRef lj_record_idx(jit_State *J, RecordIndex *ix)
        TRef key = ix->key;
        if (tref_isinteger(key))  /* NEWREF needs a TValue as a key. */
          key = emitir(IRTN(IR_CONV), key, IRCONV_NUM_INT);
+       else if (tref_isnumber(key) && tref_isk(key) && tvismzero(&ix->keyv))
+         key = lj_ir_knum_zero(J);  /* Canonicalize -0.0 to +0.0. */
        xref = emitir(IRT(IR_NEWREF, IRT_P32), ix->tab, key);
        keybarrier = 0;  /* NEWREF already takes care of the key barrier. */
       }