From 403f36a8d3521add954f6bd8795ecfc39e69f465 Mon Sep 17 00:00:00 2001 From: Stas Boukarev Date: Sun, 3 Mar 2013 00:54:34 +0400 Subject: [PATCH] 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) --- NEWS | 5 +++++ src/compiler/array-tran.lisp | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) 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))))) -- 1.7.10.4