Browse Source

Fix handling of instable types in TNEW/TDUP load forwarding.

Analyzed by Sergey Kaplun. #994
Mike Pall 2 years ago
parent
commit
9f452bbef5
1 changed files with 2 additions and 1 deletions
  1. 2 1
      src/lj_opt_mem.c

+ 2 - 1
src/lj_opt_mem.c

@@ -197,7 +197,8 @@ static TRef fwd_ahload(jit_State *J, IRRef xref)
 	if (key->o == IR_KSLOT) key = IR(key->op1);
 	lj_ir_kvalue(J->L, &keyv, key);
 	tv = lj_tab_get(J->L, ir_ktab(IR(ir->op1)), &keyv);
-	lua_assert(itype2irt(tv) == irt_type(fins->t));
+	if (itype2irt(tv) != irt_type(fins->t))
+	  return 0;  /* Type instability in loop-carried dependency. */
 	if (irt_isnum(fins->t))
 	  return lj_ir_knum_u64(J, tv->u64);
 	else if (LJ_DUALNUM && irt_isint(fins->t))