EQUALP.
* enhancement: DEFINE-MODIFY-MACRO lambda-list information is
now more readable in environments like Slime which display it.
- (thanks to Tobias C. Rittweiler)
+ (thanks to Tobias C. Rittweiler)
* bug fix: SB-EXT:COMPARE-AND-SWAP was non-atomic unless the compiler
was able to infer the correct argument type for the object on which
the CAS operation was being performed.
+ * bug fix: copy propagation interfered with parallel assignment
+ semantics in local calls. (reported by Paul Khuong)
changes in sbcl-1.0.9 relative to sbcl-1.0.8:
* minor incompatible change: SB-SYS:OUTPUT-RAW-BYTES is deprecated.
(unless (sset-member original in)
(return nil)))
(let ((info (vop-info vop)))
- (not (and (eq (vop-info-move-args info) :local-call)
- (>= (or (position-in #'tn-ref-across arg (vop-args vop)
- :key #'tn-ref-tn)
- (error "Couldn't find REF?"))
- (length (template-arg-types info))))))))
+ (not (or (eq (vop-info-move-args info) :local-call)
+ (>= (or (position-in #'tn-ref-across arg (vop-args vop)
+ :key #'tn-ref-tn)
+ (error "Couldn't find REF?"))
+ (length (template-arg-types info))))))))
;;; Make use of the result of flow analysis to eliminate copies. We
;;; scan the VOPs in block, propagating copies and keeping our IN set
(assert (default-values-bug-demo-main))
+;;; copy propagation bug reported by Paul Khuong
+
+(defun local-copy-prop-bug-with-move-arg (x)
+ (labels ((inner ()
+ (values 1 0)))
+ (if x
+ (inner)
+ (multiple-value-bind (a b)
+ (inner)
+ (values b a)))))
+
+(assert (equal '(0 1) (multiple-value-list (local-copy-prop-bug-with-move-arg nil))))
+(assert (equal '(1 0) (multiple-value-list (local-copy-prop-bug-with-move-arg t))))
+
;;; success
;;; 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".)
-"1.0.9.51"
+"1.0.9.52"