diff --git a/compiler/envanal.lisp b/compiler/envanal.lisp
index 102c5e125670a4d0504ff9015176af50a12962aa..120ae045f0ac2868498be2c78ed6b18c97078a81 100644
--- a/compiler/envanal.lisp
+++ b/compiler/envanal.lisp
@@ -7,7 +7,7 @@
 ;;; Scott Fahlman or slisp-group@cs.cmu.edu.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/envanal.lisp,v 1.14 1991/03/18 13:06:22 ram Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/envanal.lisp,v 1.15 1991/08/28 02:59:57 ram Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -67,17 +67,24 @@
 
 ;;; GET-LAMBDA-ENVIRONMENT  --  Internal
 ;;;
-;;;    If Fun has an environment, return it, otherwise assign one.
+;;;    If Fun has an environment, return it, otherwise assign one.  We clean
+;;; any deleted variables out of an existing environments closure.  This is
+;;; necessary because pre-analysis is done before optimization.
 ;;;
 (defun get-lambda-environment (fun)
   (declare (type clambda fun))
-  (let ((fun (lambda-home fun)))
-    (or (lambda-environment fun)
-	(let ((res (make-environment :function fun)))
-	  (setf (lambda-environment fun) res)
-	  (dolist (lambda (lambda-lets fun))
-	    (setf (lambda-environment lambda) res))
-	  res))))
+  (let* ((fun (lambda-home fun))
+	 (env (lambda-environment fun)))
+    (cond (env
+	   (setf (environment-closure env)
+		 (delete-if-not #'leaf-refs (environment-closure env)))
+	   env)
+	  (t
+	   (let ((res (make-environment :function fun)))
+	     (setf (lambda-environment fun) res)
+	     (dolist (lambda (lambda-lets fun))
+	       (setf (lambda-environment lambda) res))
+	     res)))))
 
 
 ;;; GET-NODE-ENVIRONMENT  --  Internal