diff options
author | Mike Pall <mike> | 2021-05-29 15:31:13 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2021-05-29 15:31:13 +0200 |
commit | 0e53a314d7910898e1ea5ba90385d43e8a6c5e57 (patch) | |
tree | 6a07a515e59477c5dade5b8bacc5da2298aab06e /src | |
parent | 2801500a26084491ae035170cad4700513790890 (diff) | |
download | luajit-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.c | 6 |
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, | |||
271 | void lj_snap_purge(jit_State *J) | 271 | void 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. */ |