From: Nikodemus S. <de...@us...> - 2010-10-06 08:59:41
|
Update of /cvsroot/sbcl/sbcl/src/compiler In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv25951/src/compiler Modified Files: ir1opt.lisp Log Message: 1.0.43.26: propagate-local-call-args for lambdas with optional-dispatches too Previously we elided the propagation if the lambda had an entry-fun or an optional-dispatch. The comment notes that we "If the function has an XEP, then we don't do anything". There are, however, lambdas with optional-dispatche that don't have XEPs. Doing propagation for these is required for proper &REST list type derivation. Fixes lp#655203. Index: ir1opt.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/ir1opt.lisp,v retrieving revision 1.139 retrieving revision 1.140 diff -u -d -r1.139 -r1.140 --- ir1opt.lisp 18 Jul 2009 17:44:42 -0000 1.139 +++ ir1opt.lisp 6 Oct 2010 08:59:32 -0000 1.140 @@ -1706,8 +1706,8 @@ ;;; variable, we compute the union of the types across all calls and ;;; propagate this type information to the var's refs. ;;; -;;; If the function has an XEP, then we don't do anything, since we -;;; won't discover anything. +;;; If the function has an entry-fun, then we don't do anything: since +;;; it has a XEP we would not discover anything. ;;; ;;; We can clear the LVAR-REOPTIMIZE flags for arguments in all calls ;;; corresponding to changed arguments in CALL, since the only use in @@ -1715,8 +1715,7 @@ ;;; right here. (defun propagate-local-call-args (call fun) (declare (type combination call) (type clambda fun)) - (unless (or (functional-entry-fun fun) - (lambda-optional-dispatch fun)) + (unless (functional-entry-fun fun) (let* ((vars (lambda-vars fun)) (union (mapcar (lambda (arg var) (when (and arg |