Package: emacs;
Reported by: Kisaragi Hiu <mail <at> kisaragi-hiu.com>
Date: Tue, 20 Oct 2020 18:42:02 UTC
Severity: normal
Found in version 28.0.50
Done: Andrea Corallo <akrl <at> sdf.org>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 44103 in the body.
You can then email your comments to 44103 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
View this report as an mbox folder, status mbox, maintainer mbox
bug-gnu-emacs <at> gnu.org
:bug#44103
; Package emacs
.
(Tue, 20 Oct 2020 18:42:02 GMT) Full text and rfc822 format available.Kisaragi Hiu <mail <at> kisaragi-hiu.com>
:bug-gnu-emacs <at> gnu.org
.
(Tue, 20 Oct 2020 18:42:02 GMT) Full text and rfc822 format available.Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Kisaragi Hiu <mail <at> kisaragi-hiu.com> To: bug-gnu-emacs <at> gnu.org Subject: 28.0.50; [feature/native-comp] let-bound dynamic variables are optimized away Date: Wed, 21 Oct 2020 03:29:35 +0900
--text follows this line-- Some functions use a dynamic (special, marked with defvar) variable to change their behaviors. In a lexically bound file, those dynamic variable bindings are currently optimized away. # Reproduction Run this function with the interpreter: ```elisp (defun k/test () (with-current-buffer (get-buffer-create "testing") (erase-buffer) (let ((data '((a . "b") (c . "b"))) (json-encoding-pretty-print t)) (insert (json-encode data))))) ``` the contents of #<buffer "testing"> after running `(k/test)` should be ``` { "a": "b", "c": "b" } ``` whereas if you native-compile the code, the contents would become ``` {"a":"b","c":"b"} ``` because `json-encoding-pretty-print` is optimized away (I think). # Potential fix Maybe it's possible to check if a variable is dynamic (special / defined with defvar) and don't optimize them away? # Related This is also the core issue behind #43536. In #43536, the reason the infinite recursion happened is because `org-roam-db-build-cache` prevents it by let-binding `org-mode-hook` to nil. Doing so, it ensures it's not called again recursively in `org-mode-hook` even if a user misconfigures Org-roam. In GNU Emacs 28.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.23, cairo version 1.17.3) of 2020-10-20 built on MF-PC Repository revision: d5791ba5feeb5500433ca43506dda13c7c67ce14 Repository branch: makepkg Windowing system distributor 'The X.Org Foundation', version 11.0.12009000 System Description: Arch Linux Configured using: 'configure --prefix=/usr --sysconfdir=/etc --libexecdir=/usr/lib --localstatedir=/var --mandir=/usr/share/man --with-gameuser=:games --with-sound=alsa --with-modules --without-gconf --without-gsettings --with-nativecomp --with-x-toolkit=gtk3 --without-xaw3d --without-m17n-flt --with-cairo --without-compress-install 'CFLAGS=-march=x86-64 -mtune=generic -O2 -pipe -fno-plt -g -fuse-ld=gold' CPPFLAGS=-D_FORTIFY_SOURCE=2 LDFLAGS=-Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now' Configured features: XPM JPEG TIFF GIF PNG RSVG CAIRO SOUND GPM DBUS GLIB NOTIFY INOTIFY ACL GNUTLS LIBXML2 FREETYPE HARFBUZZ LIBOTF ZLIB TOOLKIT_SCROLL_BARS GTK3 X11 XDBE XIM MODULES NATIVE_COMP THREADS LIBSYSTEMD JSON PDUMPER LCMS2 Important settings: value of $LANG: ja_JP.UTF-8 value of $XMODIFIERS: @im=fcitx locale-coding-system: utf-8-unix Major mode: Magit Minor modes in effect: lisp-extra-font-lock-global-mode: t org-roam-bibtex-mode: t yas-global-mode: t yas-minor-mode: t pyvenv-mode: t dired-async-mode: t org-super-agenda-mode: t kisaragi-org-ret-create-new-link-mode: t magit-todos-mode: t global-git-gutter-mode: t kisaragi/auto-save-visited-mode: t global-magit-file-mode: t magit-auto-revert-mode: t global-git-commit-mode: t global-atomic-chrome-edit-mode: t rainbow-parinfer-mode: t smartparens-global-mode: t global-anzu-mode: t anzu-mode: t kisaragi/show-trailing-whitespace-mode: t global-whitespace-mode: t show-paren-mode: t global-so-long-mode: t savehist-mode: t minibuffer-depth-indicate-mode: t recentf-mode: t global-page-break-lines-mode: t didyoumean-mode: t editorconfig-mode: t which-key-mode: t global-evil-surround-mode: t evil-surround-mode: t evil-commentary-mode: t evil-goggles-mode: t global-evil-collection-unimpaired-mode: t evil-collection-unimpaired-mode: t global-undo-tree-mode: t shell-dirtrack-mode: t evil-mode: t evil-local-mode: t global-company-mode: t company-mode: t global-flycheck-mode: t counsel-projectile-mode: t projectile-mode: t ivy-rich-mode: t ivy-prescient-mode: t prescient-persist-mode: t counsel-mode: t ivy-mode: t delete-selection-mode: t el-patch-use-package-mode: t general-override-mode: t async-bytecomp-package-mode: t leaf-key-override-global-mode: t override-global-mode: t straight-use-package-mode: t straight-package-neutering-mode: t tooltip-mode: t global-eldoc-mode: t electric-indent-mode: t mouse-wheel-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t buffer-read-only: t column-number-mode: t line-number-mode: t transient-mark-mode: t Load-path shadows: /home/kisaragi-hiu/.emacs.d/ext/company-org-block hides /home/kisaragi-hiu/.emacs.d/kisaragi/company-org-block /home/kisaragi-hiu/.emacs.d/straight/build/map/map hides /usr/share/emacs/28.0.50/lisp/emacs-lisp/map /home/kisaragi-hiu/.emacs.d/straight/build/let-alist/let-alist hides /usr/share/emacs/28.0.50/lisp/emacs-lisp/let-alist /home/kisaragi-hiu/.emacs.d/straight/build/faceup/faceup hides /usr/share/emacs/28.0.50/lisp/emacs-lisp/faceup Features: (shadow sort mail-extr fix-ffap-on-iso8601 ffap emacsbug sendmail kisaragi-log kisaragi-log-data kisaragi-log-vars vc-bzr vc-src vc-sccs vc-svn vc-cvs vc-rcs vc vc-dispatcher bug-reference evil-collection-helpful helpful trace info-look evil-collection-elisp-refs elisp-refs loop mule-util typo org-variable-pitch org-indent ol-eww ol-rmail ol-mhe ol-irc ol-info ol-gnus nnselect nnir gnus-art mm-uu mml2015 mm-view mml-smime smime dig gnus-sum gnus-group gnus-undo gnus-start gnus-dbus gnus-cloud nnimap nnmail mail-source utf7 netrc nnoo gnus-spec gnus-int gnus-win ol-docview evil-collection-doc-view doc-view jka-compr ol-bibtex ol-bbdb ol-w3m mm-archive hideshow parinfer-ext highlight-numbers parent-mode linum evil-collection-vc-git vc-git goto-addr magit-bookmark evil-collection-bookmark bookmark pp kisaragi-preload-org-files format-time-string-patch kisaragi-utau kisaragi-extra-functions evil-collection-profiler profiler generic kisaragi-fcitx fcitx dbus fcitx-autoloads kisaragi-desktop pollen-mode-autoloads csharp-mode-autoloads plisp-mode-autoloads systemd-autoloads csv-mode-autoloads ust-mode-autoloads ini-mode-autoloads toml-mode-autoloads kisaragi-ledger ledger-mode ledger-check ledger-texi ledger-test ledger-sort ledger-report ledger-reconcile ledger-occur ledger-fonts ledger-fontify ledger-state ledger-complete ledger-schedule ledger-init ledger-xact ledger-post ledger-exec ledger-navigate ledger-context ledger-commodities ledger-regex evil-ledger-autoloads flycheck-ledger flycheck-ledger-autoloads ledger-mode-autoloads js2-mode-autoloads cakecrumbs cakecrumbs-autoloads lisp-extra-font-lock lisp-extra-font-lock-autoloads bibtex-completion biblio biblio-download biblio-dissemin biblio-ieee biblio-hal biblio-dblp biblio-crossref biblio-arxiv timezone biblio-doi biblio-core hl-line parsebib ivy-bibtex-autoloads org-ref-autoloads pdf-tools-autoloads key-chord-autoloads hydra-autoloads lv-autoloads helm-bibtex-autoloads htmlize-autoloads org-roam-bibtex orb-core orb-compat orb-utils org-roam-bibtex-autoloads bibtex-completion-autoloads biblio-autoloads biblio-core-autoloads parsebib-autoloads kisaragi-org-bibtex yasnippet-snippets yasnippet highlight-indentation evil-collection-flymake flymake-proc flymake help-fns elpy find-file-in-project elpy-shell pyvenv evil-collection-eshell em-prompt eshell elpy-profile elpy-django elpy-refactor ido evil-collection-custom cus-edit cus-start cus-load elpy-autoloads pyvenv-autoloads highlight-indentation-autoloads find-file-in-project-autoloads web-mode-autoloads scribble-mode-autoloads racket-mode-autoloads pos-tip-autoloads faceup-autoloads slime-autoloads macrostep-autoloads janet-mode-autoloads flycheck-clj-kondo-autoloads cider-autoloads sesman-autoloads queue-autoloads parseedn-autoloads parseclj-autoloads clojure-mode-autoloads geiser-autoloads haskell-mode-autoloads yaml-mode-autoloads vimrc-mode-autoloads meson-mode-autoloads edit-indirect-autoloads fish-mode-autoloads company-shell-autoloads audio-mode-autoloads mpv-autoloads git-modes gitignore-mode gitconfig-mode conf-mode gitattributes-mode git-modes-autoloads generic-x tup-mode-autoloads pacfiles-mode-autoloads awk-ward-autoloads dired-show-readme-autoloads dired-collapse dired-collapse-autoloads dired-narrow-autoloads dired-filter-autoloads peep-dired peep-dired-autoloads diredfl-autoloads dired-open dired-hacks-utils dired-x dired-open-autoloads dired-hacks-utils-autoloads dired-git-info-autoloads dired-async dired-aux org-roam org-roam-link org-roam-graph org-roam-doctor org-roam-db emacsql-sqlite3 emacsql emacsql-compiler org-roam-dailies org-roam-capture org-roam-completion org-roam-buffer org-roam-faces org-roam-macs org-roam-compat org-roam-autoloads emacsql-sqlite3-autoloads emacsql-autoloads ox-reveal ox-odt ox-latex ox-icalendar ox-html table ox-ascii ox-publish ox ox-reveal-autoloads org-inline-video-thumbnails org-inline-video-thumbnails-autoloads org-download org-attach org-id org-download-autoloads ov org-super-agenda org-ql org-ql-autoloads ov-autoloads org-super-agenda-autoloads org-msr-autoloads org-variable-pitch-autoloads ob-shell ob-racket ob-lisp ob-python smartparens-python evil-collection-python python tramp-sh docker-tramp tramp-cache tramp tramp-loaddefs trampver tramp-integration files-x tramp-compat ls-lisp ob-racket-autoloads kisaragi-org-ret-create-new-link kisaragi-org-backlink org-capture org-habit org-agenda org-refile kisaragi-org-link-photo dash-functional kisaragi-org-link-diary company-org-block evil-org-agenda evil-org org-element avl-tree evil-org-autoloads image-file image-converter kisaragi-org evil-collection-magit-todos magit-todos pcre2el rxt re-builder hl-todo smartparens-org org ob ob-tangle ob-ref ob-lob ob-table ob-exp org-macro org-footnote org-src ob-comint org-pcomplete org-list org-faces org-entities evil-collection-outline noutline outline ob-emacs-lisp ob-core ob-eval org-table ol org-keys org-compat org-macs org-loaddefs evil-collection-eww eww url-queue shr kinsoku svg xml mm-url evil-collection-gnus gnus nnheader org-autoloads org-version suggest-autoloads canrylog canrylog-evil canrylog-view canrylog-commands canrylog-methods canrylog-metadata bibtex canrylog-read canrylog-parse canrylog-file canrylog-types canrylog-cache canrylog-vars canrylog-utils evil-collection-calendar cal-menu calendar cal-loaddefs canrylog-autoloads trashed-autoloads vterm-toggle-autoloads evil-collection-vterm vterm face-remap evil-collection-term term ehelp vterm-module vterm-autoloads em-tramp em-smart esh-mode esh-cmd esh-ext esh-opt esh-proc esh-io esh-arg esh-module esh-groups esh-util magit-todos-autoloads pcre2el-autoloads hl-todo-autoloads git-gutter git-gutter-autoloads evil-magit evil-magit-autoloads magit-libgit libgit libegit2 magit-libgit-autoloads libgit-autoloads evil-collection-magit magit-submodule magit-obsolete magit-blame magit-stash magit-reflog magit-bisect magit-push magit-pull magit-fetch magit-clone magit-remote magit-commit magit-sequence magit-notes magit-worktree magit-tag magit-merge magit-branch magit-reset magit-files magit-refs magit-status magit magit-repos magit-apply magit-wip magit-log which-func magit-diff smerge-mode magit-core magit-autorevert autorevert filenotify magit-margin magit-transient magit-process magit-mode git-commit magit-git magit-section magit-utils crm evil-collection-log-edit log-edit message rfc822 mml mml-sec evil-collection-epa epa gnus-util rmail rmail-loaddefs mm-decode mm-bodies mm-encode mailabbrev gmm-utils mailheader pcvs-util add-log with-editor server magit-autoloads git-commit-autoloads with-editor-autoloads kisaragi-log-autoloads docker-autoloads tablist-autoloads json-mode-autoloads json-snatcher-autoloads json-reformat-autoloads docker-tramp-autoloads speed-type-autoloads kisaragi-apps esup-autoloads buttercup-autoloads atomic-chrome websocket bindat let-alist atomic-chrome-autoloads websocket-autoloads rainbow-parinfer rainbow-delimiters parinfer-autoloads parinfer evil-collection-ediff ediff ediff-merg ediff-mult ediff-wind ediff-diff ediff-help ediff-init ediff-util parinferlib names evil-collection-edebug edebug backtrace autoload radix-tree smartparens-config smartparens-text smartparens-html smartparens smartparens-autoloads helpful-autoloads elisp-refs-autoloads loop-autoloads doom-monokai-pro-theme doom-themes doom-themes-base doom-themes-ext-org doom-themes-autoloads spacemacs-theme-autoloads monokai-theme-autoloads spaceline-config spaceline-segments spaceline powerline powerline-separators powerline-themes spaceline-autoloads powerline-autoloads evil-anzu anzu evil-anzu-autoloads anzu-autoloads cangjie-autoloads yasearch-autoloads lacarte-autoloads olivetti-autoloads typo-autoloads default-text-scale-autoloads yasnippet-snippets-autoloads yasnippet-autoloads dumb-jump-autoloads open-junk-file open-junk-file-autoloads mw-thesaurus-autoloads define-word rng-nxml rng-valid rng-loc rng-uri rng-parse nxml-parse rng-match rng-dt rng-util rng-pttrn nxml-ns nxml-mode nxml-outln nxml-rap sgml-mode dom nxml-util nxml-enc xmltok define-word-autoloads literate-calc-mode-autoloads disp-table whitespace paren display-line-numbers so-long savehist mb-depth evil-collection-dashboard dashboard dashboard-widgets time recentf tree-widget wid-edit dashboard-autoloads page-break-lines page-break-lines-autoloads link-hint-autoloads lsp-ui-autoloads lsp-mode-autoloads markdown-mode-autoloads spinner-autoloads dash-functional-autoloads migemo migemo-autoloads didyoumean didyoumean-autoloads editorconfig editorconfig-autoloads which-key-replacements evil-collection-which-key which-key which-key-autoloads format-all-autoloads highlight-numbers-autoloads parent-mode-autoloads multiple-cursors-autoloads rainbow-delimiters-autoloads kisaragi-timestamp-highlight kisaragi-keybinds evil-textobj-line evil-textobj-line-autoloads evil-textobj-syntax evil-textobj-syntax-autoloads names-autoloads evil-numbers-autoloads evil-easymotion evil-easymotion-autoloads avy-autoloads evil-surround evil-surround-autoloads evil-commentary evil-commentary-integration evil-commentary-autoloads evil-terminal-cursor-changer evil-terminal-cursor-changer-autoloads evil-collection-diff-mode diff-mode evil-goggles pulse evil-goggles-autoloads evil-collection-unimpaired evil-collection-xref evil-collection-simple evil-collection-package-menu evil-collection-occur evil-collection-minibuffer evil-collection-ivy evil-collection-info evil-collection-image image-mode exif evil-collection-ibuffer evil-collection-help evil-collection-grep evil-collection-flycheck evil-collection-elisp-mode evil-collection-dired evil-collection-compile evil-collection-comint evil-collection-calc evil-collection-buff-menu evil-collection annalist evil-collection-autoloads annalist-autoloads evil evil-integration undo-tree diff evil-maps evil-commands reveal flyspell evil-jumps evil-command-window evil-types evil-search evil-ex shell pcomplete evil-macros evil-repeat evil-states evil-core evil-common windmove rect evil-digraphs evil-vars evil-autoloads goto-chg-autoloads undo-tree-autoloads company-prescient-autoloads company-tng company-oddmuse company-keywords company-etags etags fileloop generator company-gtags company-dabbrev-code company-dabbrev company-files company-clang company-capf company-cmake company-semantic company-template company-bbdb company company-autoloads flycheck-aspell ispell flycheck-aspell-autoloads network-stream url-http mail-parse rfc2231 rfc2047 rfc2045 mm-util ietf-drums mail-prsvr url-gw nsm rmc url-cache url-auth epg epg-config flycheck-package package-lint imenu finder lisp-mnt package browse-url url-handlers flycheck-jest flycheck flycheck-jest-autoloads flycheck-package-autoloads package-lint-autoloads flycheck-autoloads let-alist-autoloads ag-autoloads counsel-projectile counsel-projectile-autoloads projectile grep ibuf-ext ibuffer ibuffer-loaddefs thingatpt projectile-autoloads pkg-info-autoloads epl-autoloads ivy-rich ivy-rich-autoloads ivy-prescient ivy-prescient-autoloads prescient prescient-autoloads counsel xref project dired dired-loaddefs compile text-property-search comint ansi-color swiper ivy flx delsel ring ivy-overlay colir color flx-autoloads counsel-autoloads swiper-autoloads ivy-autoloads helm-autoloads helm-core-autoloads popup-autoloads handle handle-autoloads edmacro kmacro el-patch el-patch-autoloads compdef derived compdef-autoloads explain-pause-mode-autoloads opencc opencc-autoloads kisaragi-constants kisaragi-helpers gnus-range uuidgen calc-misc calc-ext calc calc-loaddefs calc-macs uuidgen-autoloads xmlgen xmlgen-autoloads all-the-icons all-the-icons-faces data-material data-weathericons data-octicons data-fileicons data-faicons data-alltheicons memoize all-the-icons-autoloads memoize-autoloads general general-autoloads xr xr-autoloads transient comp warnings rx async-bytecomp advice format-spec transient-autoloads async async-autoloads ts ts-autoloads request mail-utils url url-proxy url-privacy url-expand url-methods url-history url-cookie url-domsuf url-util url-parse auth-source eieio eieio-core eieio-loaddefs password-cache json url-vars mailcap request-autoloads toml parse-time iso8601 time-date toml-autoloads git git-autoloads edn peg edn-autoloads peg-autoloads finder-inf ht ht-autoloads cl-seq f dash s f-autoloads dash-autoloads s-autoloads a a-autoloads map loadhist map-autoloads leaf-keywords leaf leaf-keywords-autoloads leaf-autoloads use-package use-package-ensure use-package-delight use-package-diminish use-package-bind-key bind-key easy-mmode use-package-core use-package-autoloads bind-key-autoloads straight-x straight-autoloads info cl-extra help-mode easymenu straight cl-macs gnutls puny cl-loaddefs cl-lib mode-local find-func subr-x xdg seq byte-opt gv bytecomp byte-compile cconv japan-util tooltip eldoc electric uniquify ediff-hook vc-hooks lisp-float-type mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode elisp-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch timer select scroll-bar mouse jit-lock font-lock syntax facemenu font-core term/tty-colors frame minibuffer cl-generic cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite charscript charprop case-table epa-hook jka-cmpr-hook help simple abbrev obarray cl-preloaded nadvice button loaddefs faces cus-face pcase macroexp files window text-properties overlay sha1 md5 base64 format env code-pages mule custom widget hashtable-print-readable backquote threads dbusbind inotify lcms2 dynamic-setting font-render-setting cairo move-toolbar gtk x-toolkit x multi-tty make-network-process nativecomp emacs) Memory information: ((conses 16 1200084 982251) (symbols 48 71635 46) (strings 32 297482 133418) (string-bytes 1 13024784) (vectors 16 132971) (vector-slots 8 3490498 997573) (floats 8 1596 3732) (intervals 56 12347 14133) (buffers 992 39))
bug-gnu-emacs <at> gnu.org
:bug#44103
; Package emacs
.
(Tue, 20 Oct 2020 19:28:01 GMT) Full text and rfc822 format available.Message #8 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Andrea Corallo <akrl <at> sdf.org> To: Kisaragi Hiu via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org> Cc: Kisaragi Hiu <mail <at> kisaragi-hiu.com>, 44103 <at> debbugs.gnu.org Subject: Re: bug#44103: 28.0.50; [feature/native-comp] let-bound dynamic variables are optimized away Date: Tue, 20 Oct 2020 19:27:02 +0000
Kisaragi Hiu via "Bug reports for GNU Emacs, the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org> writes: > --text follows this line-- > > Some functions use a dynamic (special, marked with defvar) variable to > change their behaviors. In a lexically bound file, those dynamic > variable bindings are currently optimized away. > > # Reproduction > > Run this function with the interpreter: > > ```elisp > (defun k/test () > (with-current-buffer (get-buffer-create "testing") > (erase-buffer) > (let ((data '((a . "b") (c . "b"))) > (json-encoding-pretty-print t)) > (insert (json-encode data))))) > ``` > > the contents of #<buffer "testing"> after running `(k/test)` should be > > ``` > { > "a": "b", > "c": "b" > } > ``` > > whereas if you native-compile the code, the contents would become > > ``` > {"a":"b","c":"b"} > ``` > > because `json-encoding-pretty-print` is optimized away (I think). Hi Kisaragi, I just tried native compiling this function but the result for me is the first one (the expected). Could you share a full recipe starting from emacs -Q to reproduce this behavior? Thanks! Andrea
bug-gnu-emacs <at> gnu.org
:bug#44103
; Package emacs
.
(Tue, 20 Oct 2020 19:28:01 GMT) Full text and rfc822 format available.bug-gnu-emacs <at> gnu.org
:bug#44103
; Package emacs
.
(Thu, 22 Oct 2020 20:47:02 GMT) Full text and rfc822 format available.Message #14 received at 44103 <at> debbugs.gnu.org (full text, mbox):
From: Andrea Corallo <akrl <at> sdf.org> To: mail <at> kisaragi-hiu.com Cc: 44103 <at> debbugs.gnu.org Subject: Re: bug#44103: 28.0.50; [feature/native-comp] let-bound dynamic variables are optimized away Date: Thu, 22 Oct 2020 20:46:57 +0000
Hi Kisaragi mail <at> kisaragi-hiu.com writes: > After trying for a few hours to decrease the size of the reproduction, this is all I can do... > > 1. Save this in testing.el: (bootstrap straight and install the package I was writing when I ran into the issue) > > (defvar bootstrap-version) > (let ((bootstrap-file > (expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory)) > (bootstrap-version 5)) > (unless (file-exists-p bootstrap-file) > (with-current-buffer > (url-retrieve-synchronously > "https://raw.githubusercontent.com/raxod502/straight.el/develop/install.el" > 'silent 'inhibit-cookies) > (goto-char (point-max)) > (eval-print-last-sexp))) > (load bootstrap-file nil 'nomessage)) > > (straight-use-package '(kisaragi-log :host gitlab :repo "kisaragi-hiu/kisaragi-log")) > > 2. Evaluate it in a new Emacs instance: > > rm /tmp/.emacs.d; env HOME=/tmp emacs -Q -l testing.el > > 3. Go to the repository (/tmp/.emacs.d/straight/repos/kisaragi-log/) and check out commit 9cb4338. > > 4. Restart emacs and let Straight queue to build that version > > env HOME=/tmp emacs -Q -l testing.el > > 5. Write the data: > > (kisaragi-log-data-write '((a . "a") (b . "b"))) > > 6. And look at "/tmp/.emacs.d/log.json": it's not pretty printed; this is somewhat reliably reproduced on my PC, but not > on another commit with literally the same content. > > Looking at *Async-native-compile-log*, it does warn that it thinks json-encoding-pretty-print is an unused lexical > variable. > > 7. If I add a `(require 'json)` to kisaragi-log-data.el, this doesn't happen, so perhaps this can be considered an error > on my package's side. Ah okay, this is certanly the issue. If `json' is not required the compiler doesn't know that `json-encoding-pretty-print' is a special variable and the let should be dynamic. You should see the same error with byte compilation. > In the org-roam case this can also explain it, because org-roam-db (the file that got org-mode-hook optimized out) > doesn't require org itself, relying on a macro. > > (Despite trying to create a basically equivalent (but simpler) package, I'm still not able to reproduce the issue when I > use (native-compile-async "/tmp/test" 'recursive t) to compile it. Straight.el compiles with 'late, but I don't know how > to test that.) Mmmh I don't think late-load should make a difference here. So far I do not see bugs on the native compiler side. Let me know if there's something I can look into to help. Thanks Andrea
Andrea Corallo <akrl <at> sdf.org>
:Kisaragi Hiu <mail <at> kisaragi-hiu.com>
:Message #19 received at 44103-done <at> debbugs.gnu.org (full text, mbox):
From: Andrea Corallo <akrl <at> sdf.org> To: mail <at> kisaragi-hiu.com Cc: 44103-done <at> debbugs.gnu.org Subject: Re: bug#44103: 28.0.50; [feature/native-comp] let-bound dynamic variables are optimized away Date: Fri, 23 Oct 2020 07:58:38 +0000
mail <at> kisaragi-hiu.com writes: > Yes, I think my issue has been resolved. Okay closing. Thanks Andrea PS remember to always do a reply all when replying to bugs so we keep the list posted ;-)
Debbugs Internal Request <help-debbugs <at> gnu.org>
to internal_control <at> debbugs.gnu.org
.
(Fri, 20 Nov 2020 12:24:04 GMT) Full text and rfc822 format available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.