]> git.eshelyaron.com Git - emacs.git/commitdiff
* src/lisp.h: Add explanation in a comment
authorStefan Monnier <monnier@iro.umontreal.ca>
Sat, 1 Sep 2018 22:51:26 +0000 (18:51 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Sat, 1 Sep 2018 22:51:26 +0000 (18:51 -0400)
src/lisp.h

index 36ca32c3c054b7d0f5ea01cece3d2f7e289a30c2..d244bc02d4b9f0b7179de1f9ae6daa22f2e07964 100644 (file)
@@ -866,7 +866,16 @@ 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.  */
+    /* Align the union so that there is no padding after it.
+       This is needed for the following reason:
+       If the alignment constraint of Lisp_Object is greater than the size of
+       vectorlike_header (e.g. with-wide-int), vectorlike objects which have
+       0 Lisp_Object fields and whose 1st field has a smaller alignment
+       constraint than Lisp_Object may end up with their 1st field "before
+       pseudovector index 0", in which case PSEUDOVECSIZE will return
+       a "negative" number.  We could fix PSEUDOVECSIZE, but it's easier to
+       just force rounding up the size of vectorlike_header to the alignment
+       of Lisp_Object.  */
     Lisp_Object align;
     GCALIGNED_UNION
   };