> 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