Subject: bug#68345: closed (Re: bug#68345: 29.1; cl-defstruct'ed struct errors out in the constructor compiler macro if a slot is called "quote")

From: [email-masked] (GNU bug Tracking System)
Date: Wed, 10 Jan 2024 13:48:05 +0000

Your bug report

#68345: 29.1; cl-defstruct'ed struct errors out in the constructor compiler macro if a slot is called "quote"

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
68345: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=68345
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#68345: 29.1; cl-defstruct'ed struct errors out in the constructor compiler macro if a slot is called "quote"
From: Eli Zaretskii <[email-masked]>
To: Kisaragi Hiu <[email-masked]>
Cc: [email-masked], [email-masked]
Date: Wed, 10 Jan 2024 14:55:01 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

> Cc: [email-masked]
> Date: Wed, 10 Jan 2024 07:46:56 +0900
> From:  Kisaragi Hiu via "Bug reports for GNU Emacs,
>  the Swiss army knife of text editors" <[email-masked]>
> 
> On 2024/01/09 23:59, Gerd Möllmann wrote:
> > Could you please check with Emacs/master? Seems to work there.
> 
> It works as I'd expect at master (commit 
> fccaeabc959f5403ce49744030bd2620352b59f8), without errors. I should've 
> checked master before filing this report - sorry about that.
> 
> I might run a bisect later to see how it was fixed, but this appears to 
> no longer be an issue.

Thanks, closing.

Subject: 29.1; cl-defstruct'ed struct errors out in the constructor compiler macro if a slot is called "quote"
From: Kisaragi Hiu <[email-masked]>
To: [email-masked]
Date: Tue, 9 Jan 2024 21:32:06 +0900
List-Id: <debbugs-submit.debbugs.gnu.org>

* The problem

If a struct is defined to have a slot called "quote", the constructor
will fail during the compiler macro phase.

     (require 'cl-lib)
     (cl-defstruct my-test quote)
     (make-my-test :quote "'") ; error: (invalid-function "'")

     (put 'make-my-test 'compiler-macro nil) ; disable the compiler macro
     (make-my-test :quote "'") ; => #s(test "'")

I have tested Emacs 25.3, 26.3, 27.2, 28.2, and 29.1; this error is in
all these versions.

* Why this is a bug

This feels like a bug to me, because it's not clear that this would be
an unsupported use case, and because of the inconsistent behavior
between the constructor being inlined vs. without a compiler macro.

* Potential directions

This could be "fixed" by either digging into cl-defstruct and cl-lib
then fixing it properly, or by simply declaring in the documentation
that this is not supported. I wish for a proper fix, but the
documentation workaround also seems fine to me.

* Additional info

This is what the compiler macro for make-my-test expands into:

     (cl-block make-my-test
       (record
        ("'" my-test)
        "'"))

In GNU Emacs 29.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.38,
cairo version 1.17.8)
Windowing system distributor 'The X.Org Foundation', version 11.0.12101010
System Description: Arch Linux