GNU bug report logs - #69533
30.0.50; Wrong byte compilation of a certain apply syntax

Previous Next

Package: emacs;

Reported by: Michael Heerdegen <michael_heerdegen <at> web.de>

Date: Mon, 4 Mar 2024 01:52:02 UTC

Severity: normal

Found in version 30.0.50

Done: Mattias EngdegÄrd <mattias.engdegard <at> gmail.com>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Michael Heerdegen <michael_heerdegen <at> web.de>
To: "Basil L. Contovounesios" <basil <at> contovou.net>
Cc: 69533 <at> debbugs.gnu.org, Mattias EngdegÄrd <mattiase <at> acm.org>
Subject: bug#69533: 30.0.50; Wrong byte compilation of a certain apply syntax
Date: Mon, 04 Mar 2024 09:10:42 +0100
"Basil L. Contovounesios" <basil <at> contovou.net> writes:

> Just curious: which convention are you referring to, and why do you
> say it's new?

The convention that (apply (F . ARGS)) == (apply F . ARGS).

>  AFAICT the only recent Emacs version which accepted
> (apply '(+ 1 2)) without any complaint is Emacs 28.

So it is quite new.

> FWIW, my guilty pleasure is using this calling convention with
> a non-literal form, e.g.:
>
>   (define-advice foo (:around (&rest args) my-foo)
>     (with-something (apply args)))
>
> This has always byte-compiled without issue.

Aha - a user!

No, `byte-optimize-apply' does not mess up this case:

  (byte-optimize-apply '(apply args)) --> (apply args)

so it will compile just fine but

  (byte-optimize-apply '(apply '(+ 1 2)))
   --> (funcall '(+ 1 2) '+ '1 '2) ; broken

That the byte compiler result is (sometimes) broken is a bug in the
optimization code, not in the compiler itself.

Michael.




This bug report was last modified 1 year and 162 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.