summaryrefslogtreecommitdiff
path: root/libguile/vm-engine.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2018-07-19 13:54:55 +0200
committerAndy Wingo <wingo@pobox.com>2018-07-20 11:42:30 +0200
commit9b70129504954810323e1b0b6ba43eab2ff51b01 (patch)
treed8836479ec6658fc33502d92e792c96df24e2249 /libguile/vm-engine.c
parentc2a8224a63da432c82f24a76c008e4cfe9cba25b (diff)
downloadguile-9b70129504954810323e1b0b6ba43eab2ff51b01.tar.gz
Fix stale stack frame clearing for frame size change
* libguile/vm-engine.c (return-values): Clear all 3 stack slots. Not sure this is necessary though!
Diffstat (limited to 'libguile/vm-engine.c')
-rw-r--r--libguile/vm-engine.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/libguile/vm-engine.c b/libguile/vm-engine.c
index 383b4f5df..e099c1d01 100644
--- a/libguile/vm-engine.c
+++ b/libguile/vm-engine.c
@@ -545,14 +545,15 @@ VM_NAME (scm_thread *thread)
VM_DEFINE_OP (9, return_values, "return-values", OP1 (X32))
{
union scm_vm_stack_element *old_fp;
+ size_t frame_size = 3;
old_fp = VP->fp;
ip = SCM_FRAME_VIRTUAL_RETURN_ADDRESS (VP->fp);
VP->fp = SCM_FRAME_DYNAMIC_LINK (VP->fp);
/* Clear stack frame. */
- old_fp[0].as_scm = SCM_BOOL_F;
- old_fp[1].as_scm = SCM_BOOL_F;
+ while (frame_size--)
+ old_fp[frame_size].as_scm = SCM_BOOL_F;
POP_CONTINUATION_HOOK (old_fp);