Subject: bug#49877: [Emacs 28.0.50 Trunk] *ERROR*: No applicable method: frame-creation-function

From: Christian Albrecht <[email-masked]>
Date: Mon, 09 Aug 2021 17:44:48 +0200

Hello Emacs,

Here is one way to reliably produce the behavior, please excuse
if you think the method or tools that are used are inappropriate,
this is the best i could come up with.

Unfortunatly, for me it isn't reproducible on a docker silex/emacs
image based on Debian. It hit me on my NixOS machine, so i wanted
to create a setup that could be shared to this list.

Bisecting the Github mirror source results in the already mentioned
commit with the message header "Evaluate eql specializers"
> 6535fd1fa9ac21238a168916249ac59677a6118e is the first bad commit

The eval string "(prog1 'counsel (require 'counsel))" is the minimum
piece of code that triggers the bug. This is the stripped down expansion
of the form that is generated by the package leaf.el.

Note that counsel is not the only package that produces the error.
Consequently, some package, e.g. 'package does not invoke it.

Edebugging the scenario leads to frame.el at
    (setq frame (let ((window-system w)) ; Hack attack!
                  (frame-creation-function params)))
where the crash happens.

Maybe the attached Dockerfile and brief usage info is of help for
someone to debug it, i do lack the knowledge to make sense of the behavior.

Also a diff of the config.status from my experiments with the debian
image is available, and if requested or needed, i might provide more
information.

Following command lines might be handy to inspect and observe what
is happening.

To create the image
% docker build -t emacs-49877 .

To run the drafted crash
% docker run --rm -it emacs-49877

To inspect in a shell or run emacs inside the container
% docker run --rm -it --entrypoint /bin/sh --name emacs emacs-49877

To show the build log
# source .env && nix log $BINPATH

To inspect the state of build environment
# source .env && nix show-derivation $BINPATH

To observe the bug while running in an emacsclient in one terminal
% docker run --rm -it --entrypoint /bin/sh --name emacs emacs-49877
# result/bin/emacs -Q --daemon
# result/bin/emacsclient -t

And in another terminal, two times, the second will crash
% docker exec -it emacs /emacs-overlay-master/result/bin/emacsclient -t --eval "(prog1 'counsel (require 'counsel))"
C-x 5 0

Cheers,
Christian