diff -r 749ff001f9ff src/org/armedbear/lisp/compiler-pass2.lisp
--- a/src/org/armedbear/lisp/compiler-pass2.lisp	Tue Mar 23 15:26:06 2010 +0100
+++ b/src/org/armedbear/lisp/compiler-pass2.lisp	Sun Mar 28 11:52:55 2010 +0200
@@ -4869,7 +4869,8 @@
          (*register* *register*)
          (BEGIN-BLOCK (gensym))
          (END-BLOCK (gensym))
-         (BLOCK-EXIT (block-exit block)))
+         (BLOCK-EXIT (block-exit block))
+         (BLOCK-EXIT-THIS-BLOCK (gensym)))
     (setf (block-target block) target)
     (when (block-id-variable block)
       ;; we have a block variable; that should be a closure variable
@@ -4905,6 +4906,7 @@
         (label THIS-BLOCK)
         (emit 'getfield +lisp-return-class+ "result" +lisp-object+)
         (emit-move-from-stack target) ; Stack depth is 0.
+        (emit 'goto BLOCK-EXIT-THIS-BLOCK)
         ;; Finally...
         (push (make-handler :from BEGIN-BLOCK
                             :to END-BLOCK
@@ -4920,6 +4922,7 @@
     (when (block-id-variable block)
       (emit 'aconst_null) ;; load null value
       (emit-move-to-variable (block-id-variable block)))
+    (label BLOCK-EXIT-THIS-BLOCK)
     (fix-boxing representation nil)))
 
 (defknown p2-return-from (t t t) t)
