From 7e24039a9747cc1117b17631511e42cb3576362b Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sat, 1 Sep 2018 18:51:26 -0400 Subject: [PATCH] * src/lisp.h: Add explanation in a comment --- src/lisp.h | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/lisp.h b/src/lisp.h index 36ca32c3c05..d244bc02d4b 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -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 }; -- 2.39.5