From: Alexey Dejneka Date: Sat, 17 Sep 2005 07:43:33 +0000 (+0000) Subject: 0.9.4.73: X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=a898718d7224f5cab34c623f5c56685fa60a5324;p=sbcl.git 0.9.4.73: * PACK does not modify a hashtable, which it iterates on (patch by Rob MacLachlan for a bug reported by Bryan O'Connor). --- diff --git a/NEWS b/NEWS index c9e7279..fa545f2 100644 --- a/NEWS +++ b/NEWS @@ -39,6 +39,8 @@ changes in sbcl-0.9.5 relative to sbcl-0.9.4: * bug fix: flush closure information collected by physical environment analysis prepass before the main pass. (bug reported by Vasile Rotaru) + * bug fix: compiler pack phase does not modify a hashtable, which is + iterated. (reported by Bryan O'Connor, fixed by Rob MacLachlan) * threads ** bug fix: parent thread now can be gc'ed even with a live child thread diff --git a/src/compiler/pack.lisp b/src/compiler/pack.lisp index a911dbd..235b0e5 100644 --- a/src/compiler/pack.lisp +++ b/src/compiler/pack.lisp @@ -1603,15 +1603,15 @@ (do-ir2-blocks (block component) (emit-saves block) (pack-load-tns block)))) - (when *repack-blocks* - (loop - (when (zerop (hash-table-count *repack-blocks*)) (return)) - (maphash (lambda (block v) - (declare (ignore v)) - (remhash block *repack-blocks*) - (event repack-block) - (pack-load-tns block)) - *repack-blocks*)))) + (loop + (unless *repack-blocks* (return)) + (let ((orpb *repack-blocks*)) + (setq *repack-blocks* nil) + (maphash (lambda (block v) + (declare (ignore v)) + (event repack-block) + (pack-load-tns block)) + orpb)))) (values)) (clean-up-pack-structures))) diff --git a/version.lisp-expr b/version.lisp-expr index 79890fd..b332bc6 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"0.9.4.72" +"0.9.4.73"