]> git.eshelyaron.com Git - emacs.git/commitdiff
Port struct Lisp_FLoat to oddball platforms
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 26 May 2020 07:47:24 +0000 (00:47 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 26 May 2020 07:47:48 +0000 (00:47 -0700)
* src/lisp.h (struct Lisp_Float): Declare via
GCALIGNED_UNION_MEMBER, not via GCALIGNED_STRUCT, since alloc.c
creates these in arrays and GCALIGNED_STRUCT does not necessarily
suffice to align struct Lisp_Float when it’s used in an array.
This avoids undefined behavior on oddball machines where
sizeof (struct Lisp_Float) is not a multiple of 8 and the compiler
does not support __attribute__ ((aligned 8)).

src/lisp.h

index 8bd83a888ce2fd31558e1aba4922d127cf1d717f..f5d581a2f1d7dc9d163a2b1c5a831528bbd5d367 100644 (file)
@@ -2801,8 +2801,10 @@ struct Lisp_Float
     {
       double data;
       struct Lisp_Float *chain;
+      GCALIGNED_UNION_MEMBER
     } u;
-  } GCALIGNED_STRUCT;
+  };
+verify (GCALIGNED (struct Lisp_Float));
 
 INLINE bool
 (FLOATP) (Lisp_Object x)