]> git.eshelyaron.com Git - emacs.git/commitdiff
Ensure no padding after union vectorlike_header
authorAndreas Schwab <schwab@linux-m68k.org>
Sun, 12 Aug 2018 10:05:46 +0000 (12:05 +0200)
committerAndreas Schwab <schwab@linux-m68k.org>
Sun, 12 Aug 2018 10:07:00 +0000 (12:07 +0200)
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)

src/lisp.h

index 962563862180b0d86fb01c1b7ed6dbc37dcadc67..b7ef8dc63a04010af71fba8a65083dc2765d7340 100644 (file)
@@ -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.  */