From fcd3c8ccd3ea8f8e052c8e1957cb21004c32d912 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Sat, 22 Feb 2014 15:39:29 +0100 Subject: [PATCH] Zero-offset branches are backward branches; fix "br" backward branches * libguile/vm-engine.c (BR_UNARY, BR_BINARY, BR_ARITHMETIC): A jump with a zero offset is also a backward branch, in the sense that it's not a forward branch. ("br"): We forgot to VM_HANDLE_INTERRUPTS here on backwards branches. Oops! --- libguile/vm-engine.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/libguile/vm-engine.c b/libguile/vm-engine.c index 541e11cc8..331f45ca3 100644 --- a/libguile/vm-engine.c +++ b/libguile/vm-engine.c @@ -305,7 +305,7 @@ { \ scm_t_int32 offset = ip[1]; \ offset >>= 8; /* Sign-extending shift. */ \ - if (offset < 0) \ + if (offset <= 0) \ VM_HANDLE_INTERRUPTS; \ NEXT (offset); \ } \ @@ -321,7 +321,7 @@ { \ scm_t_int32 offset = ip[1]; \ offset >>= 8; /* Sign-extending shift. */ \ - if (offset < 0) \ + if (offset <= 0) \ VM_HANDLE_INTERRUPTS; \ NEXT (offset); \ } \ @@ -342,7 +342,7 @@ { \ scm_t_int32 offset = ip[1]; \ offset >>= 8; /* Sign-extending shift. */ \ - if (offset < 0) \ + if (offset <= 0) \ VM_HANDLE_INTERRUPTS; \ NEXT (offset); \ } \ @@ -358,7 +358,7 @@ { \ scm_t_int32 offset = ip[1]; \ offset >>= 8; /* Sign-extending shift. */ \ - if (offset < 0) \ + if (offset <= 0) \ VM_HANDLE_INTERRUPTS; \ NEXT (offset); \ } \ @@ -1347,6 +1347,8 @@ VM_NAME (scm_i_thread *thread, struct scm_vm *vp, { scm_t_int32 offset = op; offset >>= 8; /* Sign-extending shift. */ + if (offset <= 0) + VM_HANDLE_INTERRUPTS; NEXT (offset); }