From: Alexey D. <ade...@co...> - 2002-08-17 16:55:37
Attachments:
let.patch
|
Hello, This patch closes bugs 65, 70, 109 and one reported by Peter Denno on cmucl-imp 2002-08-12. -- Regards, Alexey Dejneka --- "You've said you removed a bug. Why has the code grown?" |
From: William H. N. <wil...@ai...> - 2002-08-18 15:26:16
|
On Sat, Aug 17, 2002 at 08:55:05PM +0400, Alexey Dejneka wrote: > This patch closes bugs 65, 70, 109 and one reported by Peter Denno on > cmucl-imp 2002-08-12. Thank you! It will be very nice to have those bugs closed. However, the new assertion in the patch fails on the following code (based on :NEW-BUGS-LEGACY-18 in new-bugs.lisp in my local version of clocc-ansi-test.lisp): (defun b (x) (labels ((f (y &optional (z 0)) (if y (f (+ y z))))))) My first impulse is to do something along the lines of - (aver (not (eq home clambda))) + ;; Alas, that a Lisp compiler treats cycles as a special + ;; case! Code like + ;; (defun b (x) + ;; (labels ((f (y &optional (z 0)) + ;; (if y (f (+ y z))))))) + ;; can end up here with (EQ HOME CLAMBDA). F is unreachable, + ;; because it has no external references, but meanwhile it's + ;; optimized, because it has a reference to itself, and Python deals + ;; with orphaned code in a way which is fundamentally analogous + ;; to refcounting instead of true GC. In this special case, the + ;; transformations below would be fundamentally irrelevant (since + ;; the code is unreachable) so we skip them instead of inviting + ;; strange special-case failures. + (unless (eq home clambda) However, maybe it'd be better just to delete the AVER altogether. Or maybe something subtler is called for? Since you've amply demonstrated that you understand this code probably better than anyone in the world, I thought I'd ask for your help before trying too hard to figure this out for myself. -- William Harold Newman <wil...@ai...> <Krystof> But I think I can trump PCL cleanup with Alexey "CMUCL God in disguise" Dejenka -- <http://tunes.org/~nef/logs/lisp/02.08.18> PGP key fingerprint 85 CE 1C BA 79 8D 51 8C B9 25 FB EE E0 C3 E5 7C |
From: Alexey D. <ade...@co...> - 2002-08-19 08:37:08
Attachments:
let2.patch
|
William Harold Newman <wil...@ai...> writes: > On Sat, Aug 17, 2002 at 08:55:05PM +0400, Alexey Dejneka wrote: > > This patch closes bugs 65, 70, 109 and one reported by Peter Denno on > > cmucl-imp 2002-08-12. > > Thank you! It will be very nice to have those bugs closed. > > However, the new assertion in the patch fails on the following code > (based on :NEW-BUGS-LEGACY-18 in new-bugs.lisp in my local version of > clocc-ansi-test.lisp): > (defun b (x) > (labels ((f (y &optional (z 0)) > (if y (f (+ y z))))))) > My first impulse is to do something along the lines of > - (aver (not (eq home clambda))) > + ;; Alas, that a Lisp compiler treats cycles as a special > + ;; case! Code like > + ;; (defun b (x) > + ;; (labels ((f (y &optional (z 0)) > + ;; (if y (f (+ y z))))))) > + ;; can end up here with (EQ HOME CLAMBDA). F is unreachable, > + ;; because it has no external references, but meanwhile it's > + ;; optimized, because it has a reference to itself, and Python deals > + ;; with orphaned code in a way which is fundamentally analogous > + ;; to refcounting instead of true GC. In this special case, the > + ;; transformations below would be fundamentally irrelevant (since > + ;; the code is unreachable) so we skip them instead of inviting > + ;; strange special-case failures. > + (unless (eq home clambda) > However, maybe it'd be better just to delete the AVER altogether. Or > maybe something subtler is called for? Mea culpa. I did not check MAYBE-LET-CONVERT, which calls LET-CONVERT too. I've fixed it and added calls to DELETE-LAMBDA. -- Regards, Alexey Dejneka --- "You've said you removed a bug. Why has the code grown?" |
From: William H. N. <wil...@ai...> - 2002-08-20 19:19:27
|
On Mon, Aug 19, 2002 at 12:07:17PM +0400, Alexey Dejneka wrote: > William Harold Newman <wil...@ai...> writes: > > > On Sat, Aug 17, 2002 at 08:55:05PM +0400, Alexey Dejneka wrote: > > > This patch closes bugs 65, 70, 109 and one reported by Peter Denno on > > > cmucl-imp 2002-08-12. > > > > However, the new assertion in the patch fails on the following code > > (based on :NEW-BUGS-LEGACY-18 in new-bugs.lisp in my local version of > > clocc-ansi-test.lisp): > > (defun b (x) > > (labels ((f (y &optional (z 0)) > > (if y (f (+ y z))))))) > Mea culpa. I did not check MAYBE-LET-CONVERT, which calls LET-CONVERT > too. I've fixed it and added calls to DELETE-LAMBDA. OK, I've merged the revised version in sbcl-0.7.6.28, just checked in. Thanks again. -- William Harold Newman <wil...@ai...> "<rtoy> There are other compiler patches in the SBCL lists that I think could be ported over. I've been too lazy to do that, but this latest one was a MUST have. :-)" -- <http://tunes.org/~nef/logs/lisp/02.08.19> PGP key fingerprint 85 CE 1C BA 79 8D 51 8C B9 25 FB EE E0 C3 E5 7C |