Hi Liam,
On 8/7/10, Liam Healy lhealy@common-lisp.net wrote:
On Wed, Jul 28, 2010 at 3:04 PM, Sam Steingold sds@gnu.org wrote:
I don't know what "execution errors" are (probably things like FUNCALL: undefined function NIL
Yes, stuff like that. I noticed similar errors when I last tested on CLISP. At some point I'll try a new CLISP build and see if it's possible to knock these down a bit. I recommend the following technique for debugging when you see e.g. test FOO failing,
(lisp-unit:use-debugger) ; once only, will give you debugger on error (lisp-unit:run-test foo)
MATRIX-PRODUCT: FUNCALL: undefined function NIL MATRIX-PRODUCT-HERMITIAN: FUNCALL: undefined function NIL MATRIX-PRODUCT-NONSQUARE: FUNCALL: undefined function NIL MATRIX-PRODUCT-TRIANGULAR: FUNCALL: undefined function NIL MATRIX-SET-ALL: FUNCALL: undefined function NIL SCALE: FUNCALL: undefined function NIL TDIST: FFI::FOREIGN-CALL-OUT: floating point overflow VECTOR-SET-ALL: FUNCALL: undefined function NIL TOTAL: 3501 assertions passed, 15 failed, 14 execution errors.
1. VECTOR-SET-ALL: FUNCALL: undefined function NIL
*** - FUNCALL: undefined function NIL Break 1 GSL[3]> :w [197] EVAL frame for form (SET-ALL V1 #C(-34.5 8.24)) Break 1 GSL[3]> :bt <13/200> #<COMPILED-FUNCTION #:|49 60 (DEFMFUN SET-ALL (# VALUE) ...)-4-1-3|> <14/200> #<STANDARD-GENERIC-FUNCTION SET-ALL> [197] EVAL frame for form (SET-ALL V1 #C(-34.5 8.24)) Break 1 GSL[3]> v1 #4m(#C(0.0 0.0) #C(0.0 0.0) #C(0.0 0.0)) Break 1 GSL[3]> (type-of *) GRID:VECTOR-COMPLEX-SINGLE-FLOAT
(disassemble (slot-value (nth 20 (CLOS:GENERIC-FUNCTION-METHODS #'SET-ALL)) 'CLOS::$FAST-FUNCTION))
Disassembly of function #:|49 60 (DEFMFUN SET-ALL (# VALUE) ...)-4-1-4| (CONST 0) = #:|gsl_vector_complex_set_all| (CONST 1) = FOREIGN-STRUCTURES-BY-VALUE::PREPARED (CONST 2) = MPOINTER 2 required arguments 0 optional arguments No rest parameter No keyword parameters 10 byte-code instructions: 0 (CONST&PUSH 0) ; #:|gsl_vector_complex_set_all| 1 (CONST&PUSH 1) ; FOREIGN-STRUCTURES-BY-VALUE::PREPARED 2 (PUSH-UNBOUND 1) 4 (CALLS2&PUSH 158) ; GET 6 (LOAD&PUSH 3) 7 (CALL1&PUSH 2) ; MPOINTER 9 (LOAD&PUSH 3) 10 (FUNCALL 2) 12 (LOAD 2) 13 (SKIP&RET 3) NIL
(symbol-plist (sys::closure-const (slot-value (nth 20 (CLOS:GENERIC-FUNCTION-METHODS #'SET-ALL)) 'CLOS::$FAST-FUNCTION) 0)) NIL
i.e., the method FUNCALLs the property of the uninterned symbol which is NIL.
(dolist (m (CLOS:GENERIC-FUNCTION-METHODS #'SET-ALL)) (let ((c (sys::closure-consts (slot-value m 'CLOS::$FAST-FUNCTION)))) (unless (symbol-package (car c)) (print (list m c)))))
(#<STANDARD-METHOD (#<STANDARD-CLASS GRID:MATRIX-COMPLEX-DOUBLE-FLOAT> #<BUILT-IN-CLASS T>)> (#:|gsl_matrix_complex_set_all| FOREIGN-STRUCTURES-BY-VALUE::PREPARED MPOINTER)) (#<STANDARD-METHOD (#<STANDARD-CLASS GRID:MATRIX-COMPLEX-SINGLE-FLOAT> #<BUILT-IN-CLASS T>)> (#:|gsl_matrix_complex_float_set_all| FOREIGN-STRUCTURES-BY-VALUE::PREPARED MPOINTER)) (#<STANDARD-METHOD (#<STANDARD-CLASS GRID:VECTOR-COMPLEX-DOUBLE-FLOAT> #<BUILT-IN-CLASS T>)> (#:|gsl_vector_complex_set_all| FOREIGN-STRUCTURES-BY-VALUE::PREPARED MPOINTER)) (#<STANDARD-METHOD (#<STANDARD-CLASS GRID:VECTOR-COMPLEX-SINGLE-FLOAT> #<BUILT-IN-CLASS T>)> (#:|gsl_vector_complex_float_set_all| FOREIGN-STRUCTURES-BY-VALUE::PREPARED MPOINTER))
i.e., the complex vectors and matrices do not work.
why?
2. MATRIX-SET-ALL same story [399] EVAL frame for form (SET-ALL M1 #C(-34.5 8.24)) Break 2 GSL[4]> (type-of m1) GRID:MATRIX-COMPLEX-SINGLE-FLOAT
3. matrix-product: (disassemble (slot-value (first (CLOS:GENERIC-FUNCTION-METHODS #'matrix-product)) 'CLOS::$FAST-FUNCTION)) Disassembly of function #:|32 53 (DEFMFUN MATRIX-PRODUCT (# # &OPTIONAL ...) ...)-3-4-1-1| ==> (funcall (get '#:|gsl_blas_zgemm| 'FOREIGN-STRUCTURES-BY-VALUE::PREPARED))
4. (lisp-unit:run-tests scale) SCALE: FUNCALL: undefined function NIL
*** - FUNCALL: undefined function NIL Break 4 GSL[7]> :w [825] EVAL frame for form (SCALE SCALAR V1) Break 4 GSL[7]> scalar #C(32.5 42.73) Break 4 GSL[7]> v1 #4m(#C(-34.5 8.24) #C(3.29 -8.93) #C(34.12 -6.15) #C(49.27 -13.49) #C(32.5 42.73) #C(-17.24 43.31) #C(-16.12 -8.25) #C(21.44 -49.08)) Break 4 GSL[7]> (type-of *) GRID:VECTOR-COMPLEX-SINGLE-FLOAT Break 4 GSL[7]> (describe #'scale)
#<STANDARD-GENERIC-FUNCTION SCALE> is a generic function. Argument list: (ALPHA X) Methods: (FLOAT GRID:VECTOR-COMPLEX-DOUBLE-FLOAT) (FLOAT GRID:VECTOR-COMPLEX-SINGLE-FLOAT) (COMPLEX GRID:VECTOR-COMPLEX-DOUBLE-FLOAT) (COMPLEX GRID:VECTOR-COMPLEX-SINGLE-FLOAT) (FLOAT GRID:VECTOR-DOUBLE-FLOAT) (FLOAT GRID:VECTOR-SINGLE-FLOAT)
Break 4 GSL[7]> (disassemble (slot-value (third (CLOS:GENERIC-FUNCTION-METHODS #'scale)) 'CLOS::$FAST-FUNCTION))
Disassembly of function #:|127 138 (DEFMFUN SCALE (# #) ...)-11-1-4| (CONST 0) = #:|gsl_blas_zscal| (CONST 1) = FOREIGN-STRUCTURES-BY-VALUE::PREPARED (CONST 2) = MPOINTER 2 required arguments 0 optional arguments No rest parameter No keyword parameters 10 byte-code instructions: 0 (CONST&PUSH 0) ; #:|gsl_blas_zscal| 1 (CONST&PUSH 1) ; FOREIGN-STRUCTURES-BY-VALUE::PREPARED 2 (PUSH-UNBOUND 1) 4 (CALLS2&PUSH 158) ; GET 6 (LOAD&PUSH 3) 7 (LOAD&PUSH 3) 8 (CALL1&PUSH 2) ; MPOINTER 10 (FUNCALL 2) 12 (LOAD 1) 13 (SKIP&RET 3) NIL Break 4 GSL[7]>
i.e., again (funcall (get '#:|gsl_blas_zscal| 'FOREIGN-STRUCTURES-BY-VALUE::PREPARED)...)
5. (lisp-unit:run-tests tdist) TDIST: FFI::FOREIGN-CALL-OUT: floating point overflow
*** - FFI::FOREIGN-CALL-OUT: floating point overflow Break 5 GSL[8]> :w [1019] EVAL frame for form (TDIST-PINV 1.0d0 300.0d0) Break 5 GSL[8]> (describe #'TDIST-PINV)
#<COMPILED-FUNCTION TDIST-PINV> is a compiled function. Argument list: (P NU) Documentation: The inverse cumulative distribution functions P(x) for the tdist distribution with nu degrees of freedom. For more information, evaluate (DISASSEMBLE #'TDIST-PINV).
Break 5 GSL[8]> (DISASSEMBLE #'TDIST-PINV)
Disassembly of function TDIST-PINV (CONST 0) = #<FOREIGN-FUNCTION "gsl_cdf_tdist_Pinv" #x00002B6F431FECC0> 2 required arguments 0 optional arguments No rest parameter No keyword parameters 6 byte-code instructions: 0 (CONST&PUSH 0) ; # 1 (LOAD&PUSH 3) 2 (LOAD&PUSH 3) 3 (FUNCALL 2) 5 (VALUES1) 6 (SKIP&RET 3) NIL
running under gdb indicates that the machine double being converted to lisp is an "inf", so the overflow is expected...