Re: Bug report: compiling macrolet with defun inside

Raymond Toy <[email protected]> Mon, 7 Apr 2025 14:12:48 -0700
Newsgroups gmane.lisp.gcl.devel
Message-ID <[email protected]>
On 4/6/25 7:11 PM, Camm Maguire wrote:

> Greetings, and thanks for your report! Should be fixed now -- please let
> me know if not.

Yep, it’s fixed now. Took me a bit of time to rebuild successfully. I 
always have trouble building gcl unless I have a completely fresh checkout.

But it’s all working now. Thanks!

> Take care,
>
> Raymond Toy<[email protected]> writes:
>
>> On 4/6/25 2:16 PM, Camm Maguire wrote:
>>
>>   Greetings, and thank you so much for your report!
>>
>> I've pushed a fix to git branch gnu-build-system, which will appear in
>> release 2.7.0 shortly.
>>
>> Fantastic! I build 2.7.0 and can confirm the macrolet issue is fixed.
>>
>> However, I do have a build issue. I had to run autoconf again because I don’t have aclocal-1.17. Everything built fine. But then I did make install. When I run the
>> installed gcl, it can’t find /usr/lib/gcl-2.7.0/unixport/saved_gcl. I ran “configure –prefix=$HOME/dev/gcl-2.7.0”. There is saved_gcl in
>> $HOME/dev/gcl-2.7.0/lib/gcl-2.7.0/unixport/saved_gcl, as I would have expected.
>>
>>   Take care,
>>
>> David Scherfgen<[email protected]> writes:
>>
>>   Dear GCL developers,
>>
>> Here's another bug(?) I encountered.
>>
>> The following code works correctly when entering it directly into the REPL. But compiling it doesn't work correctly.
>>
>> Place this in a file bug.lisp:
>>
>> (macrolet ((impl (op) `(,op x y)))
>>    (defun add (x y) (impl +)))
>>
>> This defines a function add (x y) with the body (+ x y).
>> Compile it:
>>
>> (compile-file "bug.lisp")
>>
>> The compiler gives some warnings that already indicate that something is wrong:
>>
>> ; (DEFUN ADD ...) is being compiled.
>> ;; Warning: The variable X is not used.
>> ;; Warning: The variable Y is not used.
>>
>> Load the compiled file and try to call add:
>>
>> (load "bug.o")
>> (add 3 4)
>>
>> The following error is shown:
>>
>> Condition in ADD [or a callee]: INTERNAL-SIMPLE-TYPE-ERROR: IMPL is not of type FUNCTION:
>>
>> The compiler failed to expand the impl macro and treated it like a function!
>>
>> Tested with GCL 2.6.14.
>>
>> Best regards
>> David Scherfgen
>>
>> &#8203;
>>
&#8203;