diff options
author | Andreas Schwab <schwab@linux-m68k.org> | 2018-08-12 12:05:46 +0200 |
---|---|---|
committer | Andreas Schwab <schwab@linux-m68k.org> | 2018-08-12 12:07:00 +0200 |
commit | a04829d1b498fd63c534acae629580822ec66a7a (patch) | |
tree | d29c8a023df79a4d8dd41d9dfc450f09f613648c /src | |
parent | 3d0a0ca7ca58cdb8f07be63df28ad30e4367167d (diff) | |
download | emacs-a04829d1b498fd63c534acae629580822ec66a7a.tar.gz |
Ensure no padding after union vectorlike_header
Instead of increasing GCALIGNMENT align union vectorlike_header by
adding a Lisp_Object member.
* src/lisp.h (GCALIGNMENT): Revert last change.
(union vectorlike_header): Add align member.
(header_size): Verify the same as sizeof (union
vectorlike_header)
Diffstat (limited to 'src')
-rw-r--r-- | src/lisp.h | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/lisp.h b/src/lisp.h index 96256386218..b7ef8dc63a0 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -276,17 +276,15 @@ error !; /* Minimum alignment requirement for Lisp objects, imposed by the internal representation of tagged pointers. It is 2**GCTYPEBITS if - USE_LSB_TAG, otherwise the alignment of Lisp_Object to avoid - padding after union vectorlike_header. It must be a literal - integer constant, for older versions of GCC (through at least - 4.9). */ + USE_LSB_TAG, 1 otherwise. It must be a literal integer constant, + for older versions of GCC (through at least 4.9). */ #if USE_LSB_TAG # define GCALIGNMENT 8 # if GCALIGNMENT != 1 << GCTYPEBITS # error "GCALIGNMENT and GCTYPEBITS are inconsistent" # endif #else -# define GCALIGNMENT alignof (Lisp_Object) +# define GCALIGNMENT 1 #endif #define GCALIGNED_UNION char alignas (GCALIGNMENT) gcaligned; @@ -851,6 +849,8 @@ union vectorlike_header Current layout limits the pseudovectors to 63 PVEC_xxx subtypes, 4095 Lisp_Objects in GC-ed area and 4095 word-sized other slots. */ ptrdiff_t size; + /* Align the union so that there is no padding after it. */ + Lisp_Object align; GCALIGNED_UNION }; verify (alignof (union vectorlike_header) % GCALIGNMENT == 0); @@ -1577,6 +1577,7 @@ enum bool_header_size = offsetof (struct Lisp_Bool_Vector, data), word_size = sizeof (Lisp_Object) }; +verify (header_size == sizeof (union vectorlike_header)); /* The number of data words and bytes in a bool vector with SIZE bits. */ |