Subject: bug#4270: 23.1.50; strange behaviour of a preloaded code containg macro

From: [email-masked]
Date: Tue, 23 Aug 2016 21:24:01 -0400

Kenichi Handa <[email-masked]> writes:

> When I put the byte-compiled site-load.el that contains the
> following code in .../emacs/lisp directory, and rebuild
> emacs, that file is preloaded.
>
> ;; ------------------------------------------------------------
> (eval-when-compile
>   (put 'testsym 'char-table-extra-slots 0)
> )
>
> (defmacro testmacro ()
>   (make-char-table 'testsym))
>
> (defvar testdata (testmacro))
>
> (defun testfunc ()
>   (cons testdata (testmacro)))
> ;; ------------------------------------------------------------
>
> When I call testfunc, it returns a cons of a char-table
> (correct) and an empty vector (incorrect).
>
> When I build much more complicated char-table in testmacro,
> the cdr of the return value of testfunc is an invalid lisp
> object that causes segfault.
>
> When I remove site-load.elc and rebuild emacs (site-load.el
> is preloaded), everything works correctly
>
> This happens with Emacs 22, Emacs 23.1, and the trunk.

In current master, I get

Don't know how to purify: #^[nil nil testsym nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil]

while dumping (seems to have been the case since e3b83880 "*
src/alloc.c: Keep track of symbols referenced from pure space
(bug#17168)...").

So would that be considered fixed?