Subject: Re: bug#9960: Compiling Emacs trunk with MSVC

From: Eli Zaretskii <[email-masked]>
Date: Mon, 07 Nov 2011 19:03:18 +0200

> From: Fabrice Popineau <[email-masked]>
> Date: Mon, 7 Nov 2011 17:13:09 +0100
> Cc: Christoph Scholtes <[email-masked]>, [email-masked]
> 
> Our best bet is to use a construction like :
> 
> #define GCTYPEBITS 4
> #if (1<<GCTYPEBITS) == 2
> #define ALIGN_GCTYPEBITS 2
> #elif (1<<GCTYPEBITS) == 4
> #define ALIGN_GCTYPEBITS 4
> #elif (1<<GCTYPEBITS) == 8
> #define ALIGN_GCTYPEBITS 8
> #else
> #error Define ALIGN_GCTYPEBITS
> #endif
> 
> static int __declspec(align(ALIGN_GCTYPEBITS)) test = 1;

Will this work:

  #define ALIGN_GCTYPEBITS 8
  #if (1 << GCTYPEBITS) != ALIGN_GCTYPEBITS
  #error ALIGN_GCTYPEBITS is wrong!
  #endif
  #define DECL_ALIGN(type, var) \
       type __declspec(align(ALIGN_GCTYPEBITS)) var

Since all this is needed for MSVC alone, we could then move the
ALIGN_GCTYPEBITS definition to src/s/ms-w32.h and leave only the rest
in lisp.h.  WDYT?