GNU bug report logs -
#49746
28.0.50; bytecompilation introduces bug in org-capture with certain template
Previous Next
Reported by: Gregor Zattler <telegraph <at> gmx.net>
Date: Tue, 27 Jul 2021 14:00:01 UTC
Severity: normal
Found in version 28.0.50
Done: Mattias Engdegård <mattiase <at> acm.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your bug report
#49746: 28.0.50; bytecompilation introduces bug in org-capture with certain template
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 49746 <at> debbugs.gnu.org.
--
49746: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=49746
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
Thanks for reporting it. Your bisection saved a lot of time!
Fixed on master. Most embarrassing! Heaven knows what else was miscompiled.
[Message part 3 (message/rfc822, inline)]
Dear emacs developers, I use org-capture a lot with
org-capture-templates. It stopped working a few days ago,
throwing a error message instead:
org-capture: Capture abort: Unknown template placeholder: "%^g"
This is due to a problem with byte compilation. It does not
happen, if I remove all .elc files before starting emacs.
You may test it with this:
(custom-set-variables
'(org-capture-templates '(("d" "diary" entry (file "~/notes.org") "*** %? %^g"))))
in minconfig.el and with this invocation of emacs:
~/src/emacs$ src/emacs -Q -l /tmp/minconfig.el --eval '(org-capture 0 "d")'
If this gives you an error, quit emacs, remove all .elc
-files:
~/src/emacs$ find -type f -print0| grep -zZ "\.elc$" |xargs -0r rm
start emacs again:
~/src/emacs$ src/emacs -Q -l /tmp/minconfig.el --eval '(org-capture 0 "d")'
and there is no error.
I narrowed it down to this commit:
51a86b6a0504d580d3e10efe41abf3ae42c90711 is the first bad commit
commit 51a86b6a0504d580d3e10efe41abf3ae42c90711
Author: Mattias Engdegård <mattiase <at> acm.org>
Date: Tue Jul 20 17:23:11 2021 +0200
Count (not X) as a switch condition
* lisp/emacs-lisp/bytecomp.el (byte-compile--cond-switch-prefix):
Treat (not VAR) and (null VAR) as (eq VAR nil) when computing the
extent of switch ops.
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index 6970c8a5055..2968f1af5df 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -4340,6 +4340,16 @@ byte-compile--cond-switch-prefix
(push value keys)
(push (cons (list value) (or body '(t))) cases))
t))))
+ ;; Treat (not X) as (eq X nil).
+ (`((,(or 'not 'null) ,(and var (pred symbolp))) . ,body)
+ (and (or (eq var switch-var) (not switch-var))
+ (progn
+ (setq switch-var var)
+ (setq switch-test 'eq)
+ (unless (memq nil keys)
+ (push nil keys)
+ (push (cons (list nil) (or body '(t))) cases))
+ t)))
(`((,(and fn (or 'memq 'memql 'member)) ,var ,expr) . ,body)
(and (symbolp var)
(or (eq var switch-var) (not switch-var))
:040000 040000 ae3e2ceaa690965108fb8547ce6e90ecd2fcaaf3 28eec9e6920160dc5dff29e2567ee34b50924bec M lisp
The problem came up recently on the org-mode mailing list:
https://www.mail-archive.com/emacs-orgmode <at> gnu.org/msg138065.html
Especially this message:
https://www.mail-archive.com/emacs-orgmode <at> gnu.org/msg138121.html
inspired me to do a git bisect and test builds if the throw
this error and if so, if it also happens after removing all
.elc files.
For every step in git bisect I did a
rm -rf * ; git checkout -f ; make
in order to make sure that all .elc files are build afresh.
Ciao; Gregor
--
-... --- .-. . -.. ..--.. ...-.-
This bug report was last modified 3 years and 293 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.