[Openmcl-devel] Compiler warnings

Greg Pfeil greg at clozure.com
Sun Oct 18 16:18:49 UTC 2009


On 18 Oct 2009, at 12:05, Taoufik Dachraoui wrote:

>
> On Oct 18, 2009, at 5:47 PM, Greg Pfeil wrote:
>
>>
>>
>> On 18 Oct 2009, at 11:30, Taoufik Dachraoui wrote:
>>
>>>
>>> On Oct 18, 2009, at 4:54 PM, Greg Pfeil wrote:
>>>
>>>>
>>>> [bringing back to the list, as I forgot to CC them on my last  
>>>> message]
>>>>
>>>> On 18 Oct 2009, at 9:58, Taoufik Dachraoui wrote:
>>>>
>>>>> In our example:
>>>>>
>>>>> (setf x 1)
>>>>> (THE fixnum x)
>>>>>
>>>>> The form x returns 1 and the type of 1 is fixnum thus I do not  
>>>>> understand why the compiler
>>>>> raise a warning; Suppose that the compiler raises an error  
>>>>> instead of a warning
>>>>> stating that the x is an undeclared free variable; this may be  
>>>>> reasonable but it is not
>>>>> compliant with the standard.
>>>>
>>>> Perhaps if I show you an analogous example at eval-time (as  
>>>> opposed to compile-time) you will see how the warning that is  
>>>> signaled has nothing to do with THE.
>>>>
>>>> ? (defun the* (type expr)
>>>> (declare (ignore type))
>>>> expr)
>>>> THE*
>>>> ? (the* 'fixnum x)
>>>> > Error: Unbound variable: X
>>>>
>>>> Would you say here that THE* is signaling the error? The function  
>>>> THE* has not yet been called at the point of the error. The error  
>>>> exists merely because the form has the undeclared (and thus  
>>>> unbound) variable X in it.
>>>>
>>>
>>> ? (setf x 1)
>>> 1
>>> ? (defun the* (type expr)
>>> (declare (ignore type))
>>> expr)
>>> THE*
>>> ? (the* 'fixnum x)
>>> 1
>>> ?
>>>
>>> So here you see you do not get an error (you just forgot to setf x)
>>
>> No, I didn't forget to setf x, you missed the point of the example.  
>> The point is that a warning/error/whatever can be signaled without  
>> it being caused by the outermost form. It is clear (or so I had  
>> hoped) in my example that X is evaluated (and signals an error)  
>> before (THE* ...) is evaluated.
>>
>> In a similar fashion, X is compiled (and signals an warning) before  
>> (THE ...) is evaluated. IE, the warning that is raised has nothing  
>> to do with THE.
>>
> so (+ x 1) will raise an error? it does not.

It will unless you bind a value to x.

? (+ x 1)
 > Error: Unbound variable: X

I'm guessing you setf x somewhere, no? When I said I didn't _forget_  
to setf x, I meant that I _intentionally_ did not setf x to make my  
point. Which you still seem to be missing.



More information about the Openmcl-devel mailing list