> On Jul 19 2017, John Paul Adrian Glaubitz <glaub...@physik.fu-berlin.de>
> wrote:
>
>> "sizeof(struct Lisp_Symbol) is 22 bytes on m68k, but the code expects
>> the
>>  size of the object to be dividable by 8."
>
> No, it doesn't.  See union aligned_Lisp_Symbol.

Yes, it does, although this most likely is a bug.

While aligned_Lisp_Symbol is used in alloc.c, which is used for dynamic
allocations, and most likely works OK, it is not used for the array of
static symbols, lispsym. The declaration in globals.h (a generated file)
looks like this:

struct Lisp_Symbol alignas (GCALIGNMENT) lispsym[1101];

This does not generate an array of aligned elements, but an aligned array
of non-aligned elements. This is in line with the documented use case of
alignas to create aligned vectors of floats like "alignas(16) float
vector[4];" in which only the whole array gets aligned.

The issue can most likely be fixed by using the union (which currently is
only defined inside alloc.c) in globals.h. This means copying that
definition or putting that definition into a shared header file. globals.h
is generated by lib-src/make-docfile.c

Reply via email to