This is a live mirror of the Perl 5 development currently hosted at
perl.h: define PERL_BITFIELD8/16/32 as U8/U16/U32
authorYves Orton <>
Sat, 8 Feb 2020 15:02:49 +0000 (16:02 +0100)
committerYves Orton <>
Sat, 8 Feb 2020 15:03:31 +0000 (16:03 +0100)
After consultation with xenu we decided that defining both sets exactly the same
as U8/U16/U32 makes the most sense.

These defines were added in 654eccd594bfe8deab367b0f4cdda726a7796ff3 and the discussion
for why is here:

Short summary: Activestate added these defines so that XS code compiled with gcc on windows
could be used with a perl compiled with VC on windows, and vice-versa. Read the thread
for more details.

This patch does NOT remove the duplicate definition in win32/win32.h, I
don't feel comfortable doing that without being able to check the build,
so I will leave it to someone who has VC to test.


diff --git a/perl.h b/perl.h
index 9198ee0..65009e1 100644 (file)
--- a/perl.h
+++ b/perl.h
@@ -3827,13 +3827,13 @@ typedef        struct crypt_data {     /* straight from /usr/include/crypt.h */
 /* macros to define bit-fields in structs. */
-#  define PERL_BITFIELD8 unsigned char
+#  define PERL_BITFIELD8 U8
 #ifndef PERL_BITFIELD16
-#  define PERL_BITFIELD16 unsigned short int
+#  define PERL_BITFIELD16 U16
 #ifndef PERL_BITFIELD32
-#  define PERL_BITFIELD32 unsigned long int
+#  define PERL_BITFIELD32 U32
 #include "sv.h"
index a91776c..1133c60 100644 (file)
@@ -254,9 +254,9 @@ struct utsname {
 /* VC uses non-standard way to determine the size and alignment if bit-fields */
 /* MinGW will compile with -mms-bitfields, so should use the same types */
-#define PERL_BITFIELD8  unsigned char
-#define PERL_BITFIELD16 unsigned short int
-#define PERL_BITFIELD32 unsigned long int
+#define PERL_BITFIELD8  U8
+#define PERL_BITFIELD16 U16
+#define PERL_BITFIELD32 U32
 #ifdef _MSC_VER                        /* Microsoft Visual C++ */