[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#58601: 29.0.50; Infinite loop in byte-compile--first-symbol-with-pos
From: |
Basil L. Contovounesios |
Subject: |
bug#58601: 29.0.50; Infinite loop in byte-compile--first-symbol-with-pos |
Date: |
Fri, 21 Oct 2022 13:47:21 +0300 |
User-agent: |
Gnus/5.13 (Gnus v5.13) |
Alan Mackenzie [2022-10-18 17:06 +0000] wrote:
> On Tue, Oct 18, 2022 at 19:34:08 +0300, Basil L. Contovounesios wrote:
>> Alan Mackenzie [2022-10-18 15:01 +0000] wrote:
>> > The problem here seems to be feeding macroexp-warn-and-return with data
>> > as the FORM argument.
>> That's not the problem, because it's just for illustrative purposes.
>> Instead of 'arg' being passed unchanged as the FORM argument, it could
>> just as well have been `(my-frobnicate ,arg).
>
> That would not loop, since there is a symbol with position there.
>
>> > FORM is intended only to be an executable lisp form.
>> `(my-frobnicate ,arg) fits that bill, right? The end result is the
>> same: macroexp-warn-and-return is fed a form containing a cycle, without
>> any of the code that gives rise to the form being circular itself.
>
> This would not loop.
And yet:
my.el
Description: application/emacs-lisp
my-tests.el
Description: application/emacs-lisp
Followed by:
emacs -Q -L . -batch -f batch-byte-compile my.el
emacs -Q -L . -batch -f batch-byte-compile my-tests.el
The latter hangs prior to Stefan's limit on recursion.
>> >> Perhaps byte-compile--first-symbol-with-pos needs to employ something
>> >> like byte-run--ssp-seen? Or does ERT somehow come into play?
>> > It wouldn't be difficult, just tedious, to add checking for circular
>> > lists into byte-compile--first-symbol-with-pos. But a circular list is
>> > an invalid argument for FORM in macorexp-warn-and-return, see above.
>> How else should a compiler-macro safely warn about a problematic
>> function argument?
>
> by calling the normal byte compiler warning facilities.
Could you please point me to them?
> If there is a symbol somewhere in the FORM passed to them, it won't
> loop, even if it is a circular list.
See the case of my-identity above.
> You called macroexp-warn-and-return from outside of the byte compiler.
> From within the byte compiler, it cannot generate a loop (see above).
What counts as outside of the byte compiler? Do you mean that
macroexp-warn-and-return should be disallowed in declare forms or macro
definitions? Or that a compiler-macro should not pass forms derived
from the function's arguments to macroexp-warn-and-return? AFAIA there
is no precedent for such a restriction, and in fact I see the opposite
trend in recent history:
https://git.sv.gnu.org/cgit/emacs.git/commit/?id=d52c929e31
https://git.sv.gnu.org/cgit/emacs.git/commit/?id=52d5771e0a
https://git.sv.gnu.org/cgit/emacs.git/commit/?id=5ee4209f30
https://git.sv.gnu.org/cgit/emacs.git/commit/?id=96926fa6eb
https://git.sv.gnu.org/cgit/emacs.git/commit/?id=fffa53ff1a
https://git.sv.gnu.org/cgit/emacs.git/commit/?id=bd40ec5d57
https://git.sv.gnu.org/cgit/emacs.git/commit/?id=13d6e8fa54
https://git.sv.gnu.org/cgit/emacs.git/commit/?id=155ddde4dd
> Maybe you could construct an example of a circular list without a symbol
> from code being compiled. Maybe you could cause a warning from a correct
> call of macroexp-warn-and-return to loop. But I'd be surprised.
You have repeatedly asserted that macroexp-warn-and-return will not loop
if used correctly, but it is not clear to me from your description what
correct use of macroexp-warn-and-return entails. Could you please
explain?
Thanks,
--
Basil
- bug#58601: 29.0.50; Infinite loop in byte-compile--first-symbol-with-pos, (continued)
- bug#58601: 29.0.50; Infinite loop in byte-compile--first-symbol-with-pos, Alan Mackenzie, 2022/10/18
- bug#58601: 29.0.50; Infinite loop in byte-compile--first-symbol-with-pos, Basil L. Contovounesios, 2022/10/18
- bug#58601: 29.0.50; Infinite loop in byte-compile--first-symbol-with-pos, Alan Mackenzie, 2022/10/18
- bug#58601: 29.0.50; Infinite loop in byte-compile--first-symbol-with-pos, dick, 2022/10/18
- bug#58601: 29.0.50; Infinite loop in byte-compile--first-symbol-with-pos, Stefan Monnier, 2022/10/18
- bug#58601: 29.0.50; Infinite loop in byte-compile--first-symbol-with-pos, Alan Mackenzie, 2022/10/19
- bug#58601: 29.0.50; Infinite loop in byte-compile--first-symbol-with-pos, Stefan Monnier, 2022/10/19
- bug#58601: 29.0.50; Infinite loop in byte-compile--first-symbol-with-pos, Mattias EngdegÄrd, 2022/10/21
- bug#58601: 29.0.50; Infinite loop in byte-compile--first-symbol-with-pos, Basil L. Contovounesios, 2022/10/21
- bug#58601: 29.0.50; Infinite loop in byte-compile--first-symbol-with-pos,
Basil L. Contovounesios <=
bug#58601: 29.0.50; Infinite loop in byte-compile--first-symbol-with-pos, dick, 2022/10/18