The following code (distilled from a much larger example), generates
compiler errors --

[File "bug5.lisp"] --

(defun spunk (a b)
   (let (k m p q)
      (multiple-value-setq
         (k m p q)
        (the (values t t t t)
          (punk a b)))))

Here is the version info for CCL (running on Suse Linux) --

CMU Common Lisp 19b (19B), running on newt
With core: /usr/local/cmucl-19b/lib/cmucl/lib/lisp.core
Dumped on: Mon, 2005-06-27 20:09:58-04:00 on lorien
See <http://www.cons.org/cmucl/> for support information.
Loaded subsystems:
    Python 1.1, target Intel x86
    CLOS based on Gerd's PCL 2004/04/14 03:32:47

*features* = 

(:GERDS-PCL :PCL-STRUCTURES :PORTABLE-COMMONLOOPS :PCL :CMU19 :CMU19B :PYTHON
 :CONSERVATIVE-FLOAT-TYPE :MODULAR-ARITH :MP :X86 :LINKAGE-TABLE
 :RELATIVE-PACKAGE-NAMES :LINUX :GLIBC2 :UNIX :RANDOM-MT19937 :GENCGC :PENTIUM
 :I486 :HASH-NEW :HEAP-OVERFLOW-CHECK :STACK-CHECKING :COMMON :COMMON-LISP
 :ANSI-CL :IEEE-FLOATING-POINT :CMU)


Running under slime, you compile the file thus:

CL-USER> (compile-file "bug5.lisp")

; Python version 1.1, VM version Intel x86 on 07 DEC 05 10:04:45 pm.
; Compiling: /home/classes/cs470/lib/prog/optop/bug5.lisp 07 DEC 05 09:54:07 pm

It's running under Slime, whose sldb buffer looks like this --


Error in function LISP::ASSERT-ERROR:
   The assertion (NULL (KERNEL:ARGS-TYPE-REQUIRED C::ATYPE)) failed.
   [Condition of type SIMPLE-ERROR]

Restarts:
  0: [CONTINUE] Retry assertion.
  1: [ABORT] Abort handling SLIME request.
  2: [ABORT] Return to Top-Level.

Backtrace:
  0: (LISP::ASSERT-ERROR (NULL (KERNEL:ARGS-TYPE-REQUIRED C::ATYPE)) NIL NIL)
  1: (C::CONTINUATION-CHECK-TYPES #<Continuation c1> NIL)
      Locals:
        C::ATYPE = #<VALUES-TYPE (VALUES T T T T &REST T)>
        C::CONT = #<Continuation c1>
        COUNT = #:INVALID
        COUNT#1 = #:INVALID
        C::DEST = #:INVALID
        C::FORCE-HAIRY = NIL
        C::TYPES = #:INVALID
        C::TYPES#1 = #:INVALID
      [No catch-tags]
  2: (C::GENERATE-TYPE-CHECKS #<C:COMPONENT 58B3C90D  NAME= "DEFUN SPUNK">)
  3: (C::IR1-PHASES #<C:COMPONENT 58B3C90D  NAME= "DEFUN SPUNK">)
  4: (C::COMPILE-COMPONENT #<C:COMPONENT 58B3C90D  NAME= "DEFUN SPUNK">)
  5: (C::COMPILE-TOP-LEVEL (#<LAMBDA 58B33DF5  NAME= "Top-Level Form"  TYPE= #  
WHERE-FROM= :DEFINED  VARS= NIL>) NIL)
  6: (C::CONVERT-AND-MAYBE-COMPILE #1=(C::%DEFUN (QUOTE SPUNK) (FUNCTION #) NIL 
(QUOTE #)) (#1# C::ORIGINAL-SOURCE-START 0 0))
  7: (C::PROCESS-FORM (C::%DEFUN (QUOTE SPUNK) (FUNCTION #) NIL (QUOTE #)) 
(C::ORIGINAL-SOURCE-START 0 0))
  8: (C::PROCESS-FORM (DEFUN SPUNK (A B) (LET # #)) (C::ORIGINAL-SOURCE-START 0 
0))
  9: (C::PROCESS-FORM 2 (DEFUN SPUNK (A B) (LET # #)) (C::ORIGINAL-SOURCE-START 
0 0))[:EXTERNAL]
 10: (C::PROCESS-SOURCES #<Source-Info>)
 11: ((FLET #:G0 C::SUB-COMPILE-FILE))
 12: (C::SUB-COMPILE-FILE #<Source-Info> NIL)
 13: (C::SUB-COMPILE-FILE 1 #<Source-Info> NIL)[:EXTERNAL]
 14: (COMPILE-FILE "bug5.lisp" :OUTPUT-FILE T :ERROR-FILE ...)
 15: (SWANK::EVAL-REGION "(compile-file \"bug5.lisp\")
" T)
 16: ("DEFSLIMEFUN LISTENER-EVAL")
 17: (SWANK::CALL-WITH-BUFFER-SYNTAX #<Closure Over Function "DEFSLIMEFUN 
LISTENER-EVAL" {58B235B1}>)
 18: ("DEFUN EVAL-FOR-EMACS")
 19: ((METHOD SWANK-BACKEND:CALL-WITH-DEBUGGER-HOOK NIL (T T)) #<#1=unused-arg> 
#<#1#> #<Function SWANK:SWANK-DEBUGGER-HOOK {5874B2D1}> #<Closure Over Function 
"DEFUN EVAL-FOR-EMACS" {58B234D9}>)
 20: ("DEFUN HANDLE-REQUEST")
 21: ("DEFUN CALL-WITH-CONNECTION")
 22: (SWANK::CALL-WITH-REDIRECTED-IO #<SWANK::CONNECTION {58939F9D}> #<Closure 
Over Function "DEFUN CALL-WITH-CONNECTION" {58B23261}>)
 23: (SWANK::CALL-WITH-CONNECTION #<SWANK::CONNECTION {58939F9D}> #<Function 
"DEFUN HANDLE-REQUEST" {585E62B1}>)
 24: (SWANK::HANDLE-REQUEST #<SWANK::CONNECTION {58939F9D}>)
 25: (SWANK::PROCESS-AVAILABLE-INPUT #<Stream for descriptor 8> #<Closure Over 
Function "DEFUN INSTALL-FD-HANDLER" {58B23251}>)
 26: ((FLET SWANK::HANDLER SWANK::INSTALL-FD-HANDLER))
 27: (LISP::SUB-SERVE-EVENT 1 0)
 28: (SYSTEM:WAIT-UNTIL-FD-USABLE 0 :INPUT NIL)
 29: (LISP::DO-INPUT #<Stream for Standard Input>)
 30: (LISP::INPUT-CHARACTER #<Stream for Standard Input> NIL (LISP::*EOF*))
 31: (LISP::SYNONYM-IN #<Synonym Stream to SYSTEM:*STDIN*> NIL (LISP::*EOF*))
 32: (LISP::TWO-WAY-IN #<Two-Way Stream, Input = #<Synonym Stream to 
SYSTEM:*STDIN*>, Output = #<Synonym Stream to SYSTEM:*STDOUT*>> NIL 
(LISP::*EOF*))
 33: (LISP::SYNONYM-IN #<Synonym Stream to SWANK::*CURRENT-STANDARD-INPUT*> NIL 
(LISP::*EOF*))
 34: (READ-CHAR #<Synonym Stream to SWANK::*CURRENT-STANDARD-INPUT*> NIL 
(LISP::*EOF*) NIL)
 35: (LISP::READ-PRESERVING-WHITESPACE-INTERNAL #<Synonym Stream to 
SWANK::*CURRENT-STANDARD-INPUT*> NIL (:EOF) T)
 36: (LISP::READ-PRESERVING-WHITESPACE-INTERNAL #<Synonym Stream to 
SWANK::*CURRENT-STANDARD-INPUT*> NIL (:EOF) NIL)
 37: (LISP::READ-PRESERVING-WHITESPACE-INTERNAL 4 #<Synonym Stream to 
SWANK::*CURRENT-STANDARD-INPUT*> NIL (:EOF) ...)[:EXTERNAL]
 38: (LISP::READ-INTERNAL #<Synonym Stream to SWANK::*CURRENT-STANDARD-INPUT*> 
NIL (:EOF) NIL)
 39: (READ #<Synonym Stream to SWANK::*CURRENT-STANDARD-INPUT*> NIL (:EOF) NIL)
 40: (LISP::%TOP-LEVEL)
 41: ((LABELS LISP::RESTART-LISP SAVE-LISP))
 ...

Note that I've toggled the locals on the frame for
c::continuation-check-types, to show that the continuation around the form 

   (the (values t t t t)
        (punk a b))

seems to be relevant.

The bug occurs when the file is compiled directly under CMUCL as well,
without benefit of Slime.

    -- Drew McDermott


Reply via email to