GNU bug report logs - #76573
30.1; native compilation fails for record inside function

Previous Next

Package: emacs;

Reported by: Lin Jian <me <at> linj.tech>

Date: Tue, 25 Feb 2025 23:29:02 UTC

Severity: normal

Found in version 30.1

Done: Andrea Corallo <acorallo <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Eli Zaretskii <eliz <at> gnu.org>
To: me <at> linj.tech, Andrea Corallo <acorallo <at> gnu.org>
Cc: 76573 <at> debbugs.gnu.org
Subject: bug#76573: 30.1; native compilation fails for record inside function
Date: Sun, 13 Apr 2025 10:52:35 +0300
Ping!  Lin Jian, can you please answer Andrea's questions, so we could
decide how to proceed with this issue?

> Cc: 76573 <at> debbugs.gnu.org
> From: Andrea Corallo <acorallo <at> gnu.org>
> Date: Mon, 31 Mar 2025 11:06:13 -0400
> 
> Lin Jian <me <at> linj.tech> writes:
> 
> > Run the following shell command and you see the error.
> >
> >> emacs -Q --batch --eval="(native-compile (defun foo-f () (record 'foo-r)))"
> > Error: error (foo-f "Type foo-r missing from typeof-types!")
> >   signal(error (foo-f "Type foo-r missing from typeof-types!"))
> >   comp--native-compile(foo-f nil nil)
> >   native-compile(foo-f)
> >   eval((native-compile (defun foo-f nil (record 'foo-r))) t)
> >   command-line-1(("--eval=(native-compile (defun foo-f () (record 'foo-r)))"))
> >   command-line()
> >   normal-top-level()
> > peculiar error: "Type foo-r missing from typeof-types!"
> >
> > If you set `native-comp-speed' to -1, 0 or 1, there is no error.
> >> emacs -Q --batch --eval="(setopt native-comp-speed 1)"
> >> --eval="(native-compile (defun foo-f () (record 'foo-r)))"
> >
> > Emacs 30.0.93 and 30.1 have this bug, while Emacs 29.4 does not.
> >
> > Real world elisp packages triggering this bug are emacs-aio[1] and
> > el-easydraw[2].
> >
> > [1]: https://github.com/skeeto/emacs-aio/issues/31
> > [2]: https://github.com/misohena/el-easydraw/blob/f6b0f43138693b73cb65327d28bd2a4ee1b6caa7/edraw-path.el
> 
> Hi Lin,
> 
> the compiler is complaining because while the code is trying to create
> an object of type 'foo-r', this was actually never defined.
> 
> Typically those user defined objects are defined using higher level
> constructs like 'cl-defstruct' which takes care of registering the
> definition into the global state (and defining the creator
> 'make-foo-r').
> 
> Why is this code trying to create never defined kind of objects?  Isn't
> the case that the code in the file being compiled is missing some
> require to the definition?
> 
>   Andrea
> 
> 
> 
> 




This bug report was last modified 2 days ago.

Previous Next


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