make-instance: circular lists in initargs cause infinite loop in let binding
Bug #1099708 reported by
Dalek Baldwin
This bug affects 1 person
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
SBCL |
Fix Released
|
Low
|
Unassigned |
Bug Description
;; SBCL 1.0.58
(defclass a-lisp-object ()
((a-slot
:accessor a-slot
:initarg :a-slot)))
(let ((foo (make-instance 'a-lisp-object :a-slot '#1=(a b . #1#)))))
(let ((foo (make-instance 'a-lisp-object :a-slot '#1=(a b . #1#)))))
The first let expression finishes and returns nil, but the second one goes into an infinite loop.
Changed in sbcl: | |
status: | New → Confirmed |
importance: | Undecided → Low |
Changed in sbcl: | |
status: | Confirmed → Fix Released |
To post a comment you must log in.
looks like a problem with the compiler-macro for MAKE-INSTANCE. :MAKE-INSTANCE- >CONSTRUCTOR- CALL uses the initargs to build a function name, so second call looks up that name in the environment, then breaks when VOLATILE- INFO-LOOKUP tries to compare the circular list in the names with EQUAL.
SB-PCL:
looks like it was inherited from cmucl in version 0.7.10.31 or so