[PATCH] circularity detection broken in 1.123

Richard M Kreuter <[email protected]> Mon, 21 Jul 2008 09:44:32 -0400
Newsgroups gmane.lisp.cclan.general
Message-ID <[email protected]>
Hi,

It seems that circularity detection is broken in asdf 1.123 and
therabouts.  Patch attached.

Demonstration:

* (require "ASDF")

("ASDF")
* (progn
   (with-open-file (f "0.lisp" :direction :output :if-exists :supersede)
     (print 'foo f))
   (with-open-file (f "1.lisp" :direction :output :if-exists :supersede)
     (print 'bar f))
   nil)

NIL

* (asdf:defsystem circ
   :pathname *default-pathname-defaults*
   :components ((:file "0" :depends-on ("1"))
                (:file "1" :depends-on ("0"))))

#<ASDF:SYSTEM "circ" {10025620C1}>
* (asdf:oos 'asdf:compile-op "circ")
Control stack guard page temporarily disabled: proceed with caution

debugger invoked on a SB-KERNEL::CONTROL-STACK-EXHAUSTED in thread #<THREAD "initial thread" {1002450D61}>:
  Control stack exhausted (no more space for function call frames).  This is probably due to heavily nested or infinitely recursive function calls, or a tail call that SBCL cannot or has not optimized away.

Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [ABORT] Exit debugger, returning to top level.

(SB-KERNEL::CONTROL-STACK-EXHAUSTED-ERROR)
0] :a

--
RmK

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/

_______________________________________________
cclan-list mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/cclan-list
asdf.diff (text/x-diff, 388 B)
--- asdf.lisp	5 Jul 2008 02:57:20 -0000	1.123
+++ asdf.lisp	21 Jul 2008 13:44:41 -0000
@@ -588,7 +588,7 @@
 (defgeneric component-visiting-p (operation component))
 
 (defmethod component-visiting-p ((o operation) (c component))
-  (let ((node (cons o c)))
+  (let ((node (node-for o c)))
     (member node (operation-visiting-nodes (operation-ancestor o))
             :test 'equal)))