aboutsummaryrefslogtreecommitdiff
path: root/src/lj_opt_mem.c
diff options
context:
space:
mode:
authorMike Pall <mike>2023-12-23 19:43:03 +0100
committerMike Pall <mike>2023-12-23 19:43:03 +0100
commit658530562c2ac7ffa8e4ca5d18856857471244e9 (patch)
tree531bb84b7d9215147f62579e65b056525bdd2219 /src/lj_opt_mem.c
parent7dbe545933485849977d50384f2f20f2cccf0cf9 (diff)
downloadluajit-658530562c2ac7ffa8e4ca5d18856857471244e9.tar.gz
luajit-658530562c2ac7ffa8e4ca5d18856857471244e9.tar.bz2
luajit-658530562c2ac7ffa8e4ca5d18856857471244e9.zip
Check for IR_HREF vs. IR_HREFK aliasing in non-nil store check.
Thanks to Peter Cawley. #1133
Diffstat (limited to '')
-rw-r--r--src/lj_opt_mem.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/lj_opt_mem.c b/src/lj_opt_mem.c
index 04b95a6f..214fb632 100644
--- a/src/lj_opt_mem.c
+++ b/src/lj_opt_mem.c
@@ -879,6 +879,8 @@ int lj_opt_fwd_wasnonnil(jit_State *J, IROpT loadop, IRRef xref)
879 if (skref == xkref || !irref_isk(skref) || !irref_isk(xkref)) 879 if (skref == xkref || !irref_isk(skref) || !irref_isk(xkref))
880 return 0; /* A nil store with same const key or var key MAY alias. */ 880 return 0; /* A nil store with same const key or var key MAY alias. */
881 /* Different const keys CANNOT alias. */ 881 /* Different const keys CANNOT alias. */
882 } else if (irt_isp32(IR(skref)->t) != irt_isp32(IR(xkref)->t)) {
883 return 0; /* HREF and HREFK MAY alias. */
882 } /* Different key types CANNOT alias. */ 884 } /* Different key types CANNOT alias. */
883 } /* Other non-nil stores MAY alias. */ 885 } /* Other non-nil stores MAY alias. */
884 ref = store->prev; 886 ref = store->prev;