diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/custom/99_bugs/45_compiler_loop_ctrl_unclosed_upvals | 22 |
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 -- |