summaryrefslogtreecommitdiffhomepage
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/custom/99_bugs/45_compiler_loop_ctrl_unclosed_upvals22
1 files changed, 22 insertions, 0 deletions
diff --git a/tests/custom/99_bugs/45_compiler_loop_ctrl_unclosed_upvals b/tests/custom/99_bugs/45_compiler_loop_ctrl_unclosed_upvals
new file mode 100644
index 0000000..d4b7ed8
--- /dev/null
+++ b/tests/custom/99_bugs/45_compiler_loop_ctrl_unclosed_upvals
@@ -0,0 +1,22 @@
+When compiling loop control statements, the compiler incorrectly emitted an
+I_POP instead of an I_CUPV instruction for open upvalues, causing closures to
+reference unclosed upvalues that went out of scope, potentially leading to
+invalid stack accesses in subsequent code.
+
+-- Testcase --
+{%
+ let dest;
+
+ for (let i in [ 1 ]) {
+ let foo = i;
+ dest = () => print(foo, '\n');
+ continue;
+ }
+
+ dest();
+%}
+-- End --
+
+-- Expect stdout --
+1
+-- End --