[pardon the top post, if you find it inappropriate]

The CLHS entry for LIST-LENGTH says:

,----
| Returns the length of list if list is a proper list. Returns nil if
| list is a circular list.
`----

This means one of the possible return values is NIL.  The compiler
diagnostics seem to indicate that it has inferred that the value
returned by LIST-LENGTH are used only in number contexts.

The compiler is warning you that there will be an error in the event
LIST-LENGTH returns NIL.

I suspect the case with the other diagnostic is similar. It is likely
you are using the return value of a (WHEN clause) where the compiler
always expects a number.

Both of these deal with the specifics of your code , so it is likely
the compiler knows better (as it has access to the code) than us (who
dont:)

* Steven Edwards <[EMAIL PROTECTED]> :
Wrote on Mon, 22 Sep 2008 22:57:40 -0400:

| This might help:
|
| The problem occurs when the (list-length foobar) expression appears as
| the right hand side of a variable binding in a let* list.
|
| A perhaps related spurious diagnostic also appears in the same let*
| context (but in different lets):
|
| ;   (WHEN INLINE-FLAG
| ;     (FETCH-DIR PAS-KING-SQ FR-SQ))
| ; --> COND IF
| ; ==>
| ;   (COND)
| ; Warning: This is not a (VALUES &OPTIONAL (MOD 536870911) &REST T):
| ;   NIL
| ; ; [Last message occurs 2 times]
|
| The above COND IF NIL stuff must be from a cmucl macro expansion as
| it's not in the user source.
|
| I note that the resulting compiled object code for all of the spurious
| warning cases runs fine as does the interpreted code version.  Same
| for the clisp and gcl processors.
|
| == Steven
|
|
| On Sep 22, 2008, at 7:58 PM, Raymond Toy wrote:
|
|> Steven Edwards wrote:
|>> Greetings again, list readers:
|>>
|>> It seems that every time I compile something like:
|>>
|>>  (list-length some-random-list)
|>>
|>> I get a compiler warning:
|>>
|>> ;   (LIST-LENGTH SOME-RANDOM-LIST)
|>> ; --> BLOCK DO BLOCK LET TAGBODY WHEN COND IF PROGN RETURN
|>> ; ==>
|>> ;   (RETURN-FROM NIL NIL)
|>> ; Warning: This is not a (VALUES &OPTIONAL REAL &REST T):
|>> ;   NIL
|>> ; ; [Last message occurs 2 times]
|>>
|>> Any ideas?
|>>
|> I can't reproduce this.  What version of cmucl?  Can you provide a
|> complete example that shows this?
|>
|> Thanks,
|>
|> Ray


Reply via email to