From: Stas Boukarev Date: Sat, 2 Mar 2013 20:54:34 +0000 (+0400) Subject: Prevent a make-array transform from modifying source forms. X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=403f36a8d3521add954f6bd8795ecfc39e69f465;p=sbcl.git Prevent a make-array transform from modifying source forms. That causes repeated compilations of inlined functions to accumulate changes made by the transform. Thanks to Bart Botta. (regression since 1.0.42.11-bis) --- diff --git a/NEWS b/NEWS index ca2919b..5ff7f27 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,9 @@ ;;;; -*- coding: utf-8; fill-column: 78 -*- +changes relative to sbcl-1.1.5: + * bug fix: Prevent a make-array transform from modifying source forms + causing problems for inlined code. Thanks to Bart Botta. + (regression since 1.0.42.11-bis) + changes in sbcl-1.1.5 relative to sbcl-1.1.4: * minor incompatible change: SB-SPROF:WITH-PROFILING no longer loops by default. diff --git a/src/compiler/array-tran.lisp b/src/compiler/array-tran.lisp index baf1b98..02c5c37 100644 --- a/src/compiler/array-tran.lisp +++ b/src/compiler/array-tran.lisp @@ -372,7 +372,8 @@ (values dimensions nil)))) (let ((initial-contents (getf keyargs :initial-contents))) (when (and initial-contents rank) - (setf (getf keyargs :initial-contents) + (setf keyargs (copy-list keyargs) + (getf keyargs :initial-contents) (rewrite-initial-contents rank initial-contents env)))) `(locally (declare (notinline list vector)) (make-array ,new-dimensions ,@keyargs)))))