The generated non-local transfer functions go to a tag which will
always be in scope whenever the restart can be invoked, so wrap the
GO in a scary (safety 0) optimization declaration. This fixes
lp#1023721 (but not the issue raised in comment #1, which would be
solved naturally if lp#383078 is addressed).
Include a test which deliberately breaks the normal dynamic-extent
lifetime for restarts; restarts generated by RESTART-CASE and friends
in fact have indefinite extent, even though once they're out of the
dynamic-extent of their creating/binding operator you can't really do
anything with them (INVOKE-RESTART signals a control-error if the
restart given is not active, and there's no way to reactivate a
restart). However, the temptation to make the restart function
have dynamic-extent allocation must be resisted, because of the
indefinite lifetime of the restart object itself.
* bug fix: class definitions with CPLs inconsistent with their metaclasses
are less likely to destroy the object system's integrity. (lp#309076)
* bug fix: restart clause parsing in RESTART-CASE is more in line with the
- standard. (lp#1203595, thanks to Jan Moringen)
+ standard. (lp#1203585, thanks to Jan Moringen)
+ * bug fix: silence a note from RESTART-CASE under high-SPEED optimization
+ settings. (lp#1023721)
changes in sbcl-1.1.11 relative to sbcl-1.1.10:
* enhancement: support building the manual under texinfo version 5.
(declare (ignore rest))
`(,name #'(lambda (&rest temp)
(setq ,temp-var temp)
- (go ,tag))
+ (locally (declare (optimize (safety 0)))
+ (go ,tag)))
,@keywords)))
(make-apply-and-return (clause-data)
(destructuring-bind (name tag keywords lambda-list body) clause-data
;; win32 is very specific about the order in which catch blocks
;; must be allocated on the stack
-(with-test (:name :bug-121581169)
+(with-test (:name :bug-1072739)
(let ((f (compile nil
`(lambda ()
(STRING=
y))))
(list (string 'list))
(list "lisT")))))
+
+(with-test (:name (restart-case optimize speed compiler-note))
+ (handler-bind ((compiler-note #'error))
+ (compile nil '(lambda ()
+ (declare (optimize speed))
+ (restart-case () (c ()))))
+ (compile nil '(lambda ()
+ (declare (optimize speed))
+ (let (x)
+ (restart-case (setf x (car (compute-restarts)))
+ (c ()))
+ x)))))
+