aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2021-05-29 15:31:13 +0200
committerMike Pall <mike>2021-05-29 15:31:13 +0200
commit0e53a314d7910898e1ea5ba90385d43e8a6c5e57 (patch)
tree6a07a515e59477c5dade5b8bacc5da2298aab06e /src
parent2801500a26084491ae035170cad4700513790890 (diff)
downloadluajit-0e53a314d7910898e1ea5ba90385d43e8a6c5e57.tar.gz
luajit-0e53a314d7910898e1ea5ba90385d43e8a6c5e57.tar.bz2
luajit-0e53a314d7910898e1ea5ba90385d43e8a6c5e57.zip
Fix use-def analysis for vararg functions.
Reported by Shmuel Zeigerman.
Diffstat (limited to 'src')
-rw-r--r--src/lj_snap.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/lj_snap.c b/src/lj_snap.c
index 0c5e8e90..eb14058e 100644
--- a/src/lj_snap.c
+++ b/src/lj_snap.c
@@ -271,8 +271,10 @@ static BCReg snap_usedef(jit_State *J, uint8_t *udf,
271void lj_snap_purge(jit_State *J) 271void lj_snap_purge(jit_State *J)
272{ 272{
273 uint8_t udf[SNAP_USEDEF_SLOTS]; 273 uint8_t udf[SNAP_USEDEF_SLOTS];
274 BCReg maxslot = J->maxslot; 274 BCReg s, maxslot = J->maxslot;
275 BCReg s = snap_usedef(J, udf, J->pc, maxslot); 275 if (bc_op(*J->pc) == BC_FUNCV && maxslot > J->pt->numparams)
276 maxslot = J->pt->numparams;
277 s = snap_usedef(J, udf, J->pc, maxslot);
276 for (; s < maxslot; s++) 278 for (; s < maxslot; s++)
277 if (udf[s] != 0) 279 if (udf[s] != 0)
278 J->base[s] = 0; /* Purge dead slots. */ 280 J->base[s] = 0; /* Purge dead slots. */