]> git.eshelyaron.com Git - emacs.git/commitdiff
Change GCALIGNMENT back to an integer literal
authorPaul Eggert <eggert@cs.ucla.edu>
Fri, 3 Nov 2017 09:20:15 +0000 (02:20 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Fri, 3 Nov 2017 09:20:55 +0000 (02:20 -0700)
* src/lisp.h (GCALIGNMENT): Change it back to a macro
that expands to a literal integer constant, for older GCC.
I had mistakenly thought that only MSVC had the problem.
Problem repored by Eli Zaretskii (Bug#29040#69).

src/lisp.h

index a71ba22618e9b6c9f4a1f225ac6cbce4fb1ccdca..4dd472053bfa416ffea77defb5cef772ea9b14d3 100644 (file)
@@ -233,7 +233,9 @@ extern bool suppress_checking EXTERNALLY_VISIBLE;
 
 enum Lisp_Bits
   {
-    GCALIGNMENT = 1 << GCTYPEBITS,
+    /* 2**GCTYPEBITS.  This must be a macro that expands to a literal
+       integer constant, for older versions of GCC (through at least 4.9).  */
+#define GCALIGNMENT 8
 
     /* Number of bits in a Lisp_Object value, not counting the tag.  */
     VALBITS = EMACS_INT_WIDTH - GCTYPEBITS,
@@ -245,6 +247,10 @@ enum Lisp_Bits
     FIXNUM_BITS = VALBITS + 1
   };
 
+#if GCALIGNMENT != 1 << GCTYPEBITS
+# error "GCALIGNMENT and GCTYPEBITS are inconsistent"
+#endif
+
 /* The maximum value that can be stored in a EMACS_INT, assuming all
    bits other than the type bits contribute to a nonnegative signed value.
    This can be used in #if, e.g., '#if USE_LSB_TAG' below expands to an