Hello Tamas, On Sun, May 18, 2008 at 7:42 PM, Tamas K Papp <tpapp@princeton.edu> wrote:
When compiling a function, I get this strange error message:
; in: DEFUN UMFPACK-SOLVE ; (CFFI-SYS:NULL-POINTER) ; ; note: *INLINE-EXPANSION-LIMIT* (200) was exceeded, probably trying to ; inline a recursive function.
The code looks like this, it is in my cl-sparsematrix package (asdf-installable), cffi version is 20080217, using SBCL 1.0.16.0. The code looks like below, I tried to come up with a smaller example but couldn't (does not happen in one-liners using null-pointer). null-pointer does not look recursive to me... umfpack-catch-error is a macro. If there is something obvious I am doing wrong, please let me know, if not, helpful hints on how to determine what is going on are welcome.
Here's a smaller example: (defun foo () (list . #.(loop repeat 200 collect '(cffi:null-pointer)))) Or, without CFFI: (declaim (inline a)) (defun a () 0) (defun b () (list . #.(loop repeat 200 collect '(a)))) Notice that what you're getting is just a compiler note saying that it has decided to not inline any more functions: CL-USER> (describe '*inline-expansion-limit*) *INLINE-EXPANSION-LIMIT* is an external symbol in #<PACKAGE "SB-EXT">. It is a special variable; its value is 200. Special documentation: an upper limit on the number of inline function calls that will be expanded in any given code object (single function or block compilation) So, I suppose that's what's going on with your code. You could probably avoid that note by adding a (declare (notinline null-pointer)) or binding *INLINE-EXPANSION-LIMIT* to a bigger number while building your library. However, 200 inline expansions in one function does seem like a lot at first sight; perhaps you should investigate why that's happening. HTH. -- Luís Oliveira http://student.dei.uc.pt/~lmoliv/