diff options
Diffstat (limited to 'tests/03_bugs/10_break_stack_mismatch')
-rw-r--r-- | tests/03_bugs/10_break_stack_mismatch | 38 |
1 files changed, 0 insertions, 38 deletions
diff --git a/tests/03_bugs/10_break_stack_mismatch b/tests/03_bugs/10_break_stack_mismatch deleted file mode 100644 index ae16dac..0000000 --- a/tests/03_bugs/10_break_stack_mismatch +++ /dev/null @@ -1,38 +0,0 @@ -When emitting jump instructions for breaking out of for-loops, the compiler -incorrectly set the jump target before the pop instruction clearing the -intermediate loop variables. Since the break instruction itself already -compiles to a series of pop instructions reverting the stack to it's the -pre-loop state, intermediate values got popped twice, leading to a stack -layout mismatch between compiler and VM, resulting in wrong local variable -values or segmentation faults at runtime. - --- Testcase -- -{% - let x = 1; - - for (let y in [2]) - break; - - print(x, "\n"); -%} --- End -- - --- Expect stdout -- -1 --- End -- - - --- Testcase -- -{% - let x = 1; - - for (let y = 0; y < 1; y++) - break; - - print(x, "\n"); -%} --- End -- - --- Expect stdout -- -1 --- End -- |