Subject: Re: bug#74368: 31.0.50; Different warnings between native-compile and native-compile-async

From: Eli Zaretskii <[email-masked]>
Date: Sat, 16 Nov 2024 09:38:39 +0200

tags 74368 notabug
thanks

> From: Sean Devlin <[email-masked]>
> Date: Fri, 15 Nov 2024 12:04:42 -0500
> 
> I'm not sure if this is a bug, but I noticed a difference in behavior
> when compiling with native-compile and native-compile-async.
> 
> Recipe:
> 
> 1. mkdir /tmp/emacs-test
> 2. printf ";; -*- lexical-binding: t; -*-\n\n(vertico-mode)\n" > /tmp/emacs-test/test.el
> 2. HOME=/tmp/emacs-test emacs
> 3. M-x package-install RET vertico RET
> 4. M-: (native-compile "/tmp/emacs-test/test.el") RET
> 5. M-! touch /tmp/emacs-test/test.el RET
> 6. M-: (native-compile-async "/tmp/emacs-test/test.el") RET
> 
> There is no warning when compiling synchronously, but there is a warning
> during asynchronous compilation:
> 
> test.el:3:2: Warning: the function ‘vertico-mode’ is not known to be
> defined.
> 
> I guess maybe the asynchronous compiler has not processed the autoloads
> from installed packages, whereas the synchronous compiler has.
> 
> Is this difference in behavior expected? Or is one of the compilers
> behaving incorrectly?

This is indeed expected, and not a bug.  The asynchronous JIT
native-compilation runs in a separate batch Emacs session, which
doesn't load any of your init files.  To avoid these warnings, you
should make sure all of the *.el files that are natively compiled have
all the requisite 'require's and/or 'eval-when-compile' to load all
the dependency libraries when compiling the file as a stand-alone Lisp
package.