From: Sergio Durigan Junior <sergiodj@sergiodj.net>
To: 61880@debbugs.gnu.org
Subject: bug#61880: Native compilation fails to generate trampolines on certain scenarios
Date: Tue, 28 Feb 2023 19:13:58 -0500 [thread overview]
Message-ID: <877cw1l455.fsf@sergiodj.net> (raw)
[-- Attachment #1: Type: text/plain, Size: 4661 bytes --]
Hello,
While investigating a few bugs affecting Debian's and Ubuntu's Emacs
packages (for example,
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1028725), I stumbled
upon a problem that's affecting native compilation on Emacs 28.1+,
currently reproducible with git master as well.
I haven't been able to fully understand why the problem is happening,
but when there are two primitive functions (that would become
trampolines) being used sequentially, Emacs doesn't generate the
corresponding .eln file for the second function.
I spent some time investigating the problem and came up with a "minimal"
reproducer:
--8<---------------cut here---------------start------------->8---
(require 'cl-lib)
(defmacro foo--flet (funcs &rest body)
"Like `cl-flet' but with dynamic function scope."
(declare (indent 1))
(let* ((names (mapcar #'car funcs))
(lambdas (mapcar #'cdr funcs))
(gensyms (cl-loop for name in names
collect (make-symbol (symbol-name name)))))
`(let ,(cl-loop for name in names
for gensym in gensyms
collect `(,gensym (symbol-function ',name)))
(unwind-protect
(progn
,@(cl-loop for name in names
for lambda in lambdas
for body = `(lambda ,@lambda)
collect `(setf (symbol-function ',name) ,body))
,@body)
,@(cl-loop for name in names
for gensym in gensyms
collect `(setf (symbol-function ',name) ,gensym))))))
(defun bar (file)
(and (file-exists-p file) (file-readable-p file)))
(defun test ()
(foo--flet ((file-exists-p (file) t)
(file-readable-p (file) nil))
(message "%s" (bar "/home/sergio/.lesshst"))))
--8<---------------cut here---------------end--------------->8---
When I run it using the following Emacs:
--8<---------------cut here---------------start------------->8---
GNU Emacs 30.0.50
Development version 68cc286c0495 on master branch; build date 2023-02-28.
--8<---------------cut here---------------end--------------->8---
here is the output I see:
--8<---------------cut here---------------start------------->8---
$ emacs -batch -Q -l t.el -f test -L .
Error: native-lisp-load-failed ("file does not exists" "/home/sergio/.emacs.d/eln-cache/30.0.50-23de7b18/subr--trampoline-66696c652d7265616461626c652d70_file_readable_p_0.eln")
debug-early-backtrace()
debug-early(error (native-lisp-load-failed "file does not exists" "/home/sergio/.emacs.d/eln-cache/30.0.50-23de7b18/subr--trampoline-66696c652d7265616461626c652d70_file_readable_p_0.eln"))
native-elisp-load("/home/sergio/.emacs.d/eln-cache/30.0.50-23de7b18/subr--trampoline-66696c652d7265616461626c652d70_file_readable_p_0.eln")
comp-trampoline-search(file-readable-p)
comp-subr-trampoline-install(file-readable-p)
fset(file-readable-p (lambda (file) nil))
(progn (fset 'file-exists-p #'(lambda (file) t)) (fset 'file-readable-p #'(lambda (file) nil)) (message "%s" (bar "/home/sergio/.lesshst")))
(unwind-protect (progn (fset 'file-exists-p #'(lambda (file) t)) (fset 'file-readable-p #'(lambda (file) nil)) (message "%s" (bar "/home/sergio/.lesshst"))) (fset 'file-exists-p file-exist
s-p) (fset 'file-readable-p file-readable-p))
(let ((file-exists-p (symbol-function 'file-exists-p)) (file-readable-p (symbol-function 'file-readable-p))) (unwind-protect (progn (fset 'file-exists-p #'(lambda (file) t)) (fset 'file-re
adable-p #'(lambda (file) nil)) (message "%s" (bar "/home/sergio/.lesshst"))) (fset 'file-exists-p file-exists-p) (fset 'file-readable-p file-readable-p)))
test()
command-line-1(("-l" "t.el" "-f" "test" "-L" "."))
command-line()
normal-top-level()
Native elisp load failed: "file does not exists", "/home/sergio/.emacs.d/eln-cache/30.0.50-23de7b18/subr--trampoline-66696c652d7265616461626c652d70_file_readable_p_0.eln"
--8<---------------cut here---------------end--------------->8---
Do note that this is already affecting a few packages, like buttercup
(see https://github.com/jorgenschaefer/emacs-buttercup/issues/230) and
emacs-web-server, for example.
Please let me know if you need more information regarding the problem.
Thank you,
--
Sergio
GPG key ID: 237A 54B1 0287 28BF 00EF 31F4 D0EB 7628 65FC 5E36
Please send encrypted e-mail if possible
https://sergiodj.net/
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]
next reply other threads:[~2023-03-01 0:13 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-01 0:13 Sergio Durigan Junior [this message]
2023-03-01 12:26 ` bug#61880: Native compilation fails to generate trampolines on certain scenarios Eli Zaretskii
[not found] ` <xjfr0u8ytsa.fsf@ma.sdf.org>
2023-03-01 23:14 ` Sergio Durigan Junior
2023-03-02 7:05 ` Eli Zaretskii
2023-03-02 23:54 ` Sergio Durigan Junior
2023-03-03 7:10 ` Eli Zaretskii
[not found] ` <xjf4jr2ywta.fsf@ma.sdf.org>
2023-03-03 11:32 ` Eli Zaretskii
2023-03-04 0:20 ` Andrea Corallo
2023-03-04 7:38 ` Eli Zaretskii
[not found] ` <xjfr0u3wlwz.fsf@ma.sdf.org>
2023-03-05 10:44 ` Eli Zaretskii
2023-03-09 9:49 ` Eli Zaretskii
2023-03-09 11:36 ` Andrea Corallo
2023-03-11 4:35 ` Sergio Durigan Junior
2023-03-05 4:03 ` Richard Stallman
2023-03-05 6:28 ` Eli Zaretskii
[not found] ` <xjfjzzzz868.fsf@ma.sdf.org>
2023-03-02 12:55 ` Eli Zaretskii
2023-03-02 23:50 ` Sergio Durigan Junior
2023-03-11 15:06 ` Al Haji-Ali
2023-03-11 15:34 ` Eli Zaretskii
2023-03-14 3:58 ` Richard Stallman
2023-03-14 13:22 ` Al Haji-Ali
2023-03-14 16:13 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=877cw1l455.fsf@sergiodj.net \
--to=sergiodj@sergiodj.net \
--cc=61880@debbugs.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).