diff --git a/compiler/array-tran.lisp b/compiler/array-tran.lisp
index 53d60b0076291470061641e7fee581fb88c28bae..6abae72164aa473c5457f42f524756a096d66005 100644
--- a/compiler/array-tran.lisp
+++ b/compiler/array-tran.lisp
@@ -5,7 +5,7 @@
 ;;; Carnegie Mellon University, and has been placed in the public domain.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/array-tran.lisp,v 1.36 2004/05/05 16:37:22 rtoy Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/array-tran.lisp,v 1.37 2005/01/07 21:47:18 rtoy Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -108,7 +108,24 @@
 ;;;
 (defoptimizer (%aset derive-type) ((array &rest stuff))
   (assert-array-rank array (1- (length stuff)))
-  (assert-new-value-type (car (last stuff)) array))
+  (assert-new-value-type (car (last stuff)) array)
+  ;; Without the following,  this function
+  ;;
+  ;;   (defun fn-492 (r p1)
+  ;;     (declare (optimize speed (safety 1))
+  ;;		(type (simple-array (signed-byte 8) nil) r) (type (integer * 22050378) p1))
+  ;;     (setf (aref r) (lognand (the (integer 19464371) p1) 2257))
+  ;;     (values))
+  ;;
+  ;; causes the compiler to delete (values) as unreachable and in so
+  ;; doing, deletes the return, so we just run off the end.  I (rtoy)
+  ;; think this is caused by some confusion in type-derivation.  The
+  ;; derived result of the lognand is bigger than a (signed-byte 8).
+  ;;
+  ;; I think doing this also causes some loss, because we return the
+  ;; element-type of the array, even though the result of the aset is
+  ;; the new value.
+  (array-type-specialized-element-type (continuation-type array)))
 
 ;;; DATA-VECTOR-REF  --  derive-type optimizer.
 ;;;