aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2021-05-24 22:25:26 +0200
committerMike Pall <mike>2021-05-24 22:25:26 +0200
commit2801500a26084491ae035170cad4700513790890 (patch)
tree88e7bb1a4c5ba830ca30bc1f0e14aa8d31b00cd4
parent44684fa71d8af6fa8b3051c7d763bbfdcf7915d7 (diff)
downloadluajit-2801500a26084491ae035170cad4700513790890.tar.gz
luajit-2801500a26084491ae035170cad4700513790890.tar.bz2
luajit-2801500a26084491ae035170cad4700513790890.zip
Fix use-def analysis for BC_VARG.
Reported by Ryan Lucia.
-rw-r--r--src/lj_snap.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/lj_snap.c b/src/lj_snap.c
index fd7d806a..0c5e8e90 100644
--- a/src/lj_snap.c
+++ b/src/lj_snap.c
@@ -238,7 +238,7 @@ static BCReg snap_usedef(jit_State *J, uint8_t *udf,
238 if (!(op == BC_ISTC || op == BC_ISFC)) DEF_SLOT(bc_a(ins)); 238 if (!(op == BC_ISTC || op == BC_ISFC)) DEF_SLOT(bc_a(ins));
239 break; 239 break;
240 case BCMbase: 240 case BCMbase:
241 if (op >= BC_CALLM && op <= BC_VARG) { 241 if (op >= BC_CALLM && op <= BC_ITERN) {
242 BCReg top = (op == BC_CALLM || op == BC_CALLMT || bc_c(ins) == 0) ? 242 BCReg top = (op == BC_CALLM || op == BC_CALLMT || bc_c(ins) == 0) ?
243 maxslot : (bc_a(ins) + bc_c(ins)); 243 maxslot : (bc_a(ins) + bc_c(ins));
244 s = bc_a(ins) - ((op == BC_ITERC || op == BC_ITERN) ? 3 : 0); 244 s = bc_a(ins) - ((op == BC_ITERC || op == BC_ITERN) ? 3 : 0);
@@ -248,6 +248,8 @@ static BCReg snap_usedef(jit_State *J, uint8_t *udf,
248 for (s = 0; s < bc_a(ins); s++) DEF_SLOT(s); 248 for (s = 0; s < bc_a(ins); s++) DEF_SLOT(s);
249 return 0; 249 return 0;
250 } 250 }
251 } else if (op == BC_VARG) {
252 return maxslot; /* NYI: punt. */
251 } else if (op == BC_KNIL) { 253 } else if (op == BC_KNIL) {
252 for (s = bc_a(ins); s <= bc_d(ins); s++) DEF_SLOT(s); 254 for (s = bc_a(ins); s <= bc_d(ins); s++) DEF_SLOT(s);
253 } else if (op == BC_TSETM) { 255 } else if (op == BC_TSETM) {