GNU bug report logs - #44103
28.0.50; [feature/native-comp] let-bound dynamic variables are optimized away

Previous Next

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.

Full log


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




This bug report was last modified 4 years and 215 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.