From 8b752ddf14c1987411906d07a8c68f72f168b9b7 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Sat, 17 Aug 2024 12:37:04 -0300 Subject: Bug: wrong code gen. for indices with comparisons In function 'luaK_exp2val', used to generate code for indices: Macro 'hasjumps' does not consider the case when the whole expression is a "jump" (a test). In all other of its uses, the surrounding code ensures that the expression cannot be VJMP. --- lcode.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'lcode.c') diff --git a/lcode.c b/lcode.c index 47e5424e..e7750fff 100644 --- a/lcode.c +++ b/lcode.c @@ -31,6 +31,7 @@ #include "lvm.h" +/* (note that expressions VJMP also have jumps.) */ #define hasjumps(e) ((e)->t != (e)->f) @@ -991,7 +992,7 @@ void luaK_exp2anyregup (FuncState *fs, expdesc *e) { ** or it is a constant. */ void luaK_exp2val (FuncState *fs, expdesc *e) { - if (hasjumps(e)) + if (e->k == VJMP || hasjumps(e)) luaK_exp2anyreg(fs, e); else luaK_dischargevars(fs, e); -- cgit v1.2.3-55-g6feb