diff options
author | Andy Wingo <wingo@pobox.com> | 2018-07-19 13:54:55 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2018-07-20 11:42:30 +0200 |
commit | 9b70129504954810323e1b0b6ba43eab2ff51b01 (patch) | |
tree | d8836479ec6658fc33502d92e792c96df24e2249 /libguile/vm-engine.c | |
parent | c2a8224a63da432c82f24a76c008e4cfe9cba25b (diff) | |
download | guile-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.c | 5 |
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); |