[Openmcl-devel] Loop in function that should fail with type error
Ron Garret
ron at flownet.com
Thu Jul 9 18:55:15 PDT 2015
A compiler warning that dead code has been detected might give you the best of both worlds.
On Jul 9, 2015, at 6:15 PM, Gary Byers <gb at clozure.com> wrote:
> CLHS says that the function - "might signal a type-error" if one or more arguments is not a number.
>
> The result of the subtraction in your example is ignored. CCL sees no reason to perform the operation
> in this case.
>
> I'm a little surprised that CCL didn't perform the operation even when your code was compiled with
> (optimize (safety 3)) in effect; I'm fairly sure that fairly recent versions did so, and there is some argument
> for performing operations for the sole reason of detecting (possible) errors in that case. If CLHS said that
> "an error should be signaled (in safe code)", that argument would be stronger.
>
> Given the terminology that's actually used, you can't count on an error being signaled even when SAFETY = 3,
> though the practical benefits of doing the subtraction for no (other) reason might outweigh whatever is gained
> by not doing it. Those practical benefits include not having to write (or ask anyone to read) explanations like this
> again.
>
>
> On 07/09/2015 04:33 PM, Renzo Orsini wrote:
>> The following (absurd) function:
>>
>> (defun wrong(l)
>> (if (eq nil l)
>> l
>> (- (car (cdr l)) (car l)))
>> (wrong (cdr l)))
>>
>> if called as in: (wrong ‘(10 5)) should terminate with an error due to the application of the operator “-“ to NIL (this for instance happen in SBCL). But when I try it in CCL it seems to enter in an infinite loop. Is this an error? Some effect of the compiler optimization?
>>
>> Should I open a ticket?
>>
>> Thanks,
>>
>> Renzo
>>
>>
>
> _______________________________________________
> Openmcl-devel mailing list
> Openmcl-devel at clozure.com
> https://lists.clozure.com/mailman/listinfo/openmcl-devel
More information about the Openmcl-devel
mailing list