From addb5fea94ea4011fe7d593ee3c59d6d07803839 Mon Sep 17 00:00:00 2001 From: Kevin Newton Date: Fri, 27 Sep 2024 13:06:27 -0400 Subject: [PATCH] Fix up compiling popped ranges with non-optimizable bounds Fixes [Bug #20763] --- prism_compile.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/prism_compile.c b/prism_compile.c index 22956fa5e3..a159267da3 100644 --- a/prism_compile.c +++ b/prism_compile.c @@ -9678,19 +9678,19 @@ pm_compile_node(rb_iseq_t *iseq, const pm_node_t *node, LINK_ANCHOR *const ret, } } else { - if (cast->left == NULL) { - PUSH_INSN(ret, location, putnil); - } - else { + if (cast->left != NULL) { PM_COMPILE(cast->left); } - - if (cast->right == NULL) { + else if (!popped) { PUSH_INSN(ret, location, putnil); } - else { + + if (cast->right != NULL) { PM_COMPILE(cast->right); } + else if (!popped) { + PUSH_INSN(ret, location, putnil); + } if (!popped) { PUSH_INSN1(ret, location, newrange, INT2FIX(exclude_end ? 1 : 0));