diff --git a/compiler/locall.lisp b/compiler/locall.lisp
index ebda1036341349038f5644baa9fd2d9f91183b22..0ad28751e19e107c7048eae95863119de0d06a9f 100644
--- a/compiler/locall.lisp
+++ b/compiler/locall.lisp
@@ -23,10 +23,11 @@
 (in-package 'c)
 
 
-;;; Propagate-To-Args  --  Internal
+;;; Propagate-To-Args  --  Interface
 ;;;
 ;;;    This function propagates information from the variables in the function
-;;; Fun to the actual arguments in Call.
+;;; Fun to the actual arguments in Call.  This is also called by the VALUES IR1
+;;; optimizer when it sleazily converts MV-BINDs to LETs.
 ;;;
 ;;;    We flush all arguments to Call that correspond to unreferenced variables
 ;;; in Fun.  We leave NILs in the Combination-Args so that the remaining args
@@ -444,6 +445,7 @@
 	 (arglist (optional-dispatch-arglist fun))
 	 (args (combination-args call))
 	 (keys (nthcdr max args))
+	 (flame (policy call (or (> speed brevity) (> space brevity))))
 	 (loser nil))
     (collect ((temps)
 	      (ignores)
@@ -455,6 +457,9 @@
 	  (when info
 	    (ecase (arg-info-kind info)
 	      (:rest
+	       (when flame
+		 (compiler-note
+		  "Rest arg prevents use of local call convention."))
 	       (setf (ref-inlinep ref) :notinline)
 	       (return-from convert-keyword-call))
 	      (:keyword
@@ -468,7 +473,7 @@
 	  ((null key))
 	(let ((cont (first key)))
 	  (unless (constant-continuation-p cont)
-	    (when (policy call (or (> speed brevity) (> space brevity)))
+	    (when flame
 	      (compiler-note "Non-constant keyword in keyword call."))
 	    (setf (ref-inlinep ref) :notinline)
 	    (return-from convert-keyword-call))
@@ -593,6 +598,7 @@
 ;;;
 (defun insert-let-body (fun call)
   (declare (type clambda fun) (type basic-combination call))
+  (setf (lambda-call-lexenv fun) (node-lexenv call))
   (let* ((call-block (node-block call))
 	 (bind-block (node-block (lambda-bind fun)))
 	 (component (block-component call-block)))