Hello, while trying to migrate our codebase from cmucl 18e to 19c, I have encountered two problems; the first one (foo1) looks to me like a bug somewhere deep in the compiler, and the second one (foo2) seems to be just an unhelpful error message triggered by buggy code on our side.
To reproduce the errors, get the sources (51KB) from http://www.ags.uni-sb.de/~afranke/lisp/cmucl19c-problems.tgz unpack them with 'tar zxf', cd into the toplevel dir, and run bin/Make foo1 or bin/Make foo2 The output is attached for both cases (see foo1.txt and foo2.txt). Besides the defsystem stuff, the lisp code in question is: (foo1): (defun foo (&key (test #'oddp)) (remove-if #'(lambda (x) (apply test (list x))) nil)) (foo2): (defun foo () (let (a) (declare (type (simple-array list 1) a)) (mapc #'(lambda (x) (bar a)) nil))) The second error can be fixed easily by quoting the list symbol in the type declaration, but the first one is non-obvious to me. Thanks for your time, Andreas -- Attached file included as plaintext by Listar -- -- File: foo1.txt /tmp/cmucl19c-problems> bin/Make foo1 ; Compiling LAMBDA (.PV-CELL. .NEXT-METHOD-CALL. OBJECT STREAM): ; Compiling Top-Level Form: ; Compiling LAMBDA (.PV-CELL. .NEXT-METHOD-CALL. OBJECT STREAM): ; Compiling Top-Level Form: ; Loading #P"/tmp/cmucl19c-problems/src/sys/foo1.system". ; Loading #P"/tmp/cmucl19c-problems/src/share/foo1.lisp". ; Python version 1.1, VM version Intel x86 on 09 JAN 06 04:26:55 pm. ; Compiling: /tmp/cmucl19c-problems/src/share/foo1.lisp 06 JAN 06 05:46:50 am ; Converted FOO. ; Compiling DEFUN FOO: ; ; ; File: /tmp/cmucl19c-problems/src/share/foo1.lisp ; In: DEFUN FOO ; (APPLY TEST (LIST X)) ; --> MULTIPLE-VALUE-CALL LET IF ; ==> ; (KERNEL:%COERCE-TO-FUNCTION #:OO-3) ; Note: Unable to optimize because: ; Might be a symbol, so must call FDEFINITION at runtime. ; ; #'(LAMBDA (X) (APPLY TEST #)) ; Note: Return type not fixed values, so can't use known return convention: ; * ; ; (DEFUN FOO (&KEY #) (REMOVE-IF #'# NIL)) ; Note: Return type not fixed values, so can't use known return convention: ; * Type-error in KERNEL::OBJECT-NOT-TYPE-ERROR-HANDLER: NIL is not of type C::CONTINUATION [Condition of type TYPE-ERROR] Restarts: 0: [ABORT] Skip remaining initializations. Debug (type H for help) (C::FIND-PUSHED-CONTINUATIONS #<C::CBLOCK Start = c1 {58A819BD}>) Source: Error finding source: Error in function DEBUG::GET-FILE-TOP-LEVEL-FORM: Source file no longer exists: target:compiler/stack.lisp. 0] d (C::STACK-ANALYZE #<C:COMPONENT #x58A85B9D NAME= "DEFUN FOO">) 1] d (C::NATIVE-COMPILE-COMPONENT #<C:COMPONENT #x58A85B9D NAME= "DEFUN FOO">) 2] d (C::COMPILE-COMPONENT #<C:COMPONENT #x58A85B9D NAME= "DEFUN FOO">) 3] d (C::COMPILE-TOP-LEVEL (#<LAMBDA #x58A61005 NAME= "Top-Level Form" TYPE= # WHERE-FROM= :DEFINED VARS= NIL>) NIL) 4] d (C::CONVERT-AND-MAYBE-COMPILE (C::%DEFUN 'FOO #'(LAMBDA # #) NIL '(DEFUN FOO # #)) ((C::%DEFUN 'FOO #'# NIL '#) C::ORIGINAL-SOURCE-START 0 1)) 5] d (C::PROCESS-FORM (C::%DEFUN 'FOO #'(LAMBDA # #) NIL '(DEFUN FOO # #)) (C::ORIGINAL-SOURCE-START 0 1)) 6] d (C::PROCESS-FORM (DEFUN FOO (&KEY #) (REMOVE-IF #'# NIL)) (C::ORIGINAL-SOURCE-START 0 1)) 7] d (C::PROCESS-FORM 2 (DEFUN FOO (&KEY #) (REMOVE-IF #'# NIL)) (C::ORIGINAL-SOURCE-START 0 1))[:EXTERNAL] 8] d (C::PROCESS-SOURCES #<Source-Info>) 9] d ((FLET #:G0 C::SUB-COMPILE-FILE)) 10] d (C::SUB-COMPILE-FILE #<Source-Info> NIL) 11] d (C::SUB-COMPILE-FILE 1 #<Source-Info> NIL)[:EXTERNAL] 12] d (COMPILE-FILE "/tmp/cmucl19c-problems/src/share/foo1.lisp" :OUTPUT-FILE "/tmp/cmucl19c-problems/binaries/I486-CMU-19/share/foo1.fasl" :ERROR-FILE ...) 13] d ((FLET #:G1 )) 14] d (MAKE::COMPILE-FILE-OPERATION #<FILE: foo1> :NEW-SOURCE-AND-DEPENDENTS) 15] d (MAKE::COMPILE-FILE-OPERATION #<FILE: foo1> :NEW-SOURCE-AND-DEPENDENTS) 16] d (MAKE::COMPILE-AND-LOAD-OPERATION #<FILE: foo1> :NEW-SOURCE-AND-DEPENDENTS) 17] d (MAKE::OPERATE-ON-COMPONENT #<FILE: foo1> :COMPILE :NEW-SOURCE-AND-DEPENDENTS) 18] d (MAKE::OPERATE-ON-COMPONENT #<FILE: foo1> :COMPILE :NEW-SOURCE-AND-DEPENDENTS) 19] d (MAKE::OPERATE-ON-COMPONENTS #<DEFSYSTEM: foo1> :COMPILE :NEW-SOURCE-AND-DEPENDENTS NIL) 20] d (MAKE::OPERATE-ON-COMPONENT #<DEFSYSTEM: foo1> :COMPILE :NEW-SOURCE-AND-DEPENDENTS) 21] d (MAKE::OPERATE-ON-COMPONENT #<DEFSYSTEM: foo1> :COMPILE :NEW-SOURCE-AND-DEPENDENTS) 22] d (OPERATE-ON-SYSTEM FOO1 :COMPILE :FORCE :NEW-SOURCE-AND-DEPENDENTS ...)[:OPTIONAL] 23] d (OPERATE-ON-SYSTEM FOO1 :COMPILE :FORCE :NEW-SOURCE-AND-DEPENDENTS ...)[:OPTIONAL] 24] d (EVAL (PROGN (MAKE::COMPILE-SYS 'FOO1) (MAKE::DUMP-SYSTEM 'FOO1) (EXIT))) -- Attached file included as plaintext by Listar -- -- File: foo2.txt /tmp/cmucl19c-problems> bin/Make foo2 ; Compiling LAMBDA (.PV-CELL. .NEXT-METHOD-CALL. OBJECT STREAM): ; Compiling Top-Level Form: ; Compiling LAMBDA (.PV-CELL. .NEXT-METHOD-CALL. OBJECT STREAM): ; Compiling Top-Level Form: ; Loading #P"/tmp/cmucl19c-problems/src/sys/foo2.system". ; Loading #P"/tmp/cmucl19c-problems/src/share/foo2.lisp". ; Python version 1.1, VM version Intel x86 on 09 JAN 06 04:29:59 pm. ; Compiling: /tmp/cmucl19c-problems/src/share/foo2.lisp 06 JAN 06 06:42:24 am ; In: LAMBDA NIL ; #'(LAMBDA (X) (BAR A)) ; Note: Variable X defined but never used. ; ; Converted FOO. ; Compiling DEFUN FOO: ; ; ; File: /tmp/cmucl19c-problems/src/share/foo2.lisp ; In: DEFUN FOO ; #'(LAMBDA (X) (BAR A)) ; Note: Variable X defined but never used. ; ; (LET (A) ; (DECLARE #) ; (MAPC #'# NIL)) ; Warning: The binding of A is not a (VALUES &OPTIONAL (SIMPLE-ARRAY LIST #) &REST T): ; NIL ; ; Note: Deleting unreachable code. ; ; (DEFUN FOO () ; (LET # ; # ; #)) ; Note: Return type not fixed values, so can't use known return convention: ; * Error in function LISP::ASSERT-ERROR: The assertion (EQ C::ENV (C::LAMBDA-ENVIRONMENT (C::LAMBDA-VAR-HOME C::THING))) failed. [Condition of type SIMPLE-ERROR] Restarts: 0: [CONTINUE] Retry assertion. 1: [ABORT ] Skip remaining initializations. Debug (type H for help) (LISP::ASSERT-ERROR (EQ C::ENV (C::LAMBDA-ENVIRONMENT #)) NIL NIL) Source: Error finding source: Error in function DEBUG::GET-FILE-TOP-LEVEL-FORM: Source file no longer exists: target:code/macros.lisp. 0] d (C::FIND-IN-ENVIRONMENT #<C::LAMBDA-VAR #x58A7529D NAME= #:G3> #<C::ENVIRONMENT #x58A8C7DD FUNCTION= #<LAMBDA #x58A7360D NAME= FOO TYPE= #<FUNCTION-TYPE #> WHERE-FROM= :DEFINED VARS= NIL> NLX-INFO= (#<C::NLX-INFO 58AA1025> #<C::NLX-INFO 58A8C81D>)>) 1] d (C::IR2-CONVERT-REF #<C::REF #x58A76715 LEAF= #<C::LAMBDA-VAR #x58A7529D NAME= #:G3>> #<C::IR2-BLOCK #x58AA4E4D>) 2] d (C::IR2-CONVERT-BLOCK #<C::CBLOCK Start = c2 {58A7FD35}>) 3] d (C:IR2-CONVERT #<C:COMPONENT #x58A7B79D NAME= "DEFUN FOO">) 4] d (C::NATIVE-COMPILE-COMPONENT #<C:COMPONENT #x58A7B79D NAME= "DEFUN FOO">) 5] d (C::COMPILE-COMPONENT #<C:COMPONENT #x58A7B79D NAME= "DEFUN FOO">) 6] d (C::COMPILE-TOP-LEVEL (#<LAMBDA #x58A61245 NAME= "Top-Level Form" TYPE= # WHERE-FROM= :DEFINED VARS= NIL>) NIL) 7] d (C::CONVERT-AND-MAYBE-COMPILE (C::%DEFUN 'FOO #'(LAMBDA # #) NIL '(DEFUN FOO # #)) ((C::%DEFUN 'FOO #'# NIL '#) C::ORIGINAL-SOURCE-START 0 1)) 8] d (C::PROCESS-FORM (C::%DEFUN 'FOO #'(LAMBDA # #) NIL '(DEFUN FOO # #)) (C::ORIGINAL-SOURCE-START 0 1)) 9] d (C::PROCESS-FORM (DEFUN FOO () (LET # # #)) (C::ORIGINAL-SOURCE-START 0 1)) 10] d (C::PROCESS-FORM 2 (DEFUN FOO () (LET # # #)) (C::ORIGINAL-SOURCE-START 0 1))[:EXTERNAL] 11] d (C::PROCESS-SOURCES #<Source-Info>) 12] d ((FLET #:G0 C::SUB-COMPILE-FILE)) 13] d (C::SUB-COMPILE-FILE #<Source-Info> NIL) 14] d (C::SUB-COMPILE-FILE 1 #<Source-Info> NIL)[:EXTERNAL] 15] d (COMPILE-FILE "/tmp/cmucl19c-problems/src/share/foo2.lisp" :OUTPUT-FILE "/tmp/cmucl19c-problems/binaries/I486-CMU-19/share/foo2.fasl" :ERROR-FILE ...) 16] d ((FLET #:G1 )) 17] d (MAKE::COMPILE-FILE-OPERATION #<FILE: foo2> :NEW-SOURCE-AND-DEPENDENTS) 18] d (MAKE::COMPILE-FILE-OPERATION #<FILE: foo2> :NEW-SOURCE-AND-DEPENDENTS) 19] d (MAKE::COMPILE-AND-LOAD-OPERATION #<FILE: foo2> :NEW-SOURCE-AND-DEPENDENTS) 20] d (MAKE::OPERATE-ON-COMPONENT #<FILE: foo2> :COMPILE :NEW-SOURCE-AND-DEPENDENTS) 21] d (MAKE::OPERATE-ON-COMPONENT #<FILE: foo2> :COMPILE :NEW-SOURCE-AND-DEPENDENTS) 22] d (MAKE::OPERATE-ON-COMPONENTS #<DEFSYSTEM: foo2> :COMPILE :NEW-SOURCE-AND-DEPENDENTS NIL) 23] d (MAKE::OPERATE-ON-COMPONENT #<DEFSYSTEM: foo2> :COMPILE :NEW-SOURCE-AND-DEPENDENTS) 24] d (MAKE::OPERATE-ON-COMPONENT #<DEFSYSTEM: foo2> :COMPILE :NEW-SOURCE-AND-DEPENDENTS) 25] d (OPERATE-ON-SYSTEM FOO2 :COMPILE :FORCE :NEW-SOURCE-AND-DEPENDENTS ...)[:OPTIONAL] 26] d (OPERATE-ON-SYSTEM FOO2 :COMPILE :FORCE :NEW-SOURCE-AND-DEPENDENTS ...)[:OPTIONAL] 27] d (EVAL (PROGN (MAKE::COMPILE-SYS 'FOO2) (MAKE::DUMP-SYSTEM 'FOO2) (EXIT)))
