diff --git a/pcl/method-slot-access-optimization.lisp b/pcl/method-slot-access-optimization.lisp
index a73dac305dd6774c43e0dc54804788f375051cc6..2a534311470e1f8984ece1038588261f76fb71b9 100644
--- a/pcl/method-slot-access-optimization.lisp
+++ b/pcl/method-slot-access-optimization.lisp
@@ -52,7 +52,7 @@
 ;;;
 
 (file-comment
- "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/pcl/method-slot-access-optimization.lisp,v 1.3 2003/05/04 13:11:21 gerd Exp $")
+ "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/pcl/method-slot-access-optimization.lisp,v 1.4 2003/05/08 11:21:33 gerd Exp $")
  
 (in-package "PCL")
 
@@ -511,12 +511,19 @@
     (let ((slot-type (if use-type-p slot-type t)))
       (if check-bound-p
 	  `(the ,slot-type
-	     (let* ((.location. (%svref .pv. ,pv-offset))
-		    (.slot-value. (if ,predicate ,read-form +slot-unbound+)))
+	     (locally
 	       (declare #.*optimize-speed*)
-	       (if (eq .slot-value. +slot-unbound+)
-		   ,fallback-access
-		   .slot-value.)))
+	       (block nil
+		 (let ((.location. (%svref .pv. ,pv-offset)))
+		   (tagbody
+		      (unless ,predicate
+			(go miss))
+		      (let ((.slot-value. ,read-form))
+			(when (eq +slot-unbound+ .slot-value.)
+			  (go miss))
+			(return .slot-value.))
+		    miss
+		      (return ,fallback-access))))))
 	  `(the ,slot-type
 	     (let ((.location. (%svref .pv. ,pv-offset)))
 	       (declare #.*optimize-speed*)