Make it so that StgWord/StgInt are longs
authorSimon Marlow <simonmar@microsoft.com>
Thu, 8 Jun 2006 14:34:38 +0000 (14:34 +0000)
committerSimon Marlow <simonmar@microsoft.com>
Thu, 8 Jun 2006 14:34:38 +0000 (14:34 +0000)
This means we can use a %ld format specifier for StgWord/StgInt with
printf and not get shouted at by gcc.

includes/StgTypes.h

index ac2f78e..7f2c08e 100644 (file)
@@ -48,11 +48,14 @@ typedef unsigned char            StgWord8;
 typedef signed   short           StgInt16;
 typedef unsigned short           StgWord16;
 
 typedef signed   short           StgInt16;
 typedef unsigned short           StgWord16;
 
-#if SIZEOF_UNSIGNED_INT == 4
+#if SIZEOF_LONG == 4
+typedef signed   long            StgInt32;
+typedef unsigned long            StgWord32;
+#elif SIZEOF_INT == 4
 typedef signed   int             StgInt32;
 typedef unsigned int             StgWord32;
 #else
 typedef signed   int             StgInt32;
 typedef unsigned int             StgWord32;
 #else
-#error GHC untested on this architecture: sizeof(unsigned int) != 4
+#error GHC untested on this architecture: sizeof(int) != 4
 #endif
 
 #ifdef SUPPORT_LONG_LONGS
 #endif
 
 #ifdef SUPPORT_LONG_LONGS
@@ -77,6 +80,12 @@ typedef unsigned __int64       StgWord64;
 /*
  * Define the standard word size we'll use on this machine: make it
  * big enough to hold a pointer.
 /*
  * Define the standard word size we'll use on this machine: make it
  * big enough to hold a pointer.
+ *
+ * It's useful if StgInt/StgWord are always the same as long, so that
+ * we can use a consistent printf format specifier without warnings on
+ * any platform.  Fortunately this works at the moement; if it breaks
+ * in the future we'll have to start using macros for format
+ * specifiers (c.f. FMT_StgWord64 in Rts.h).
  */
 
 #if SIZEOF_VOID_P == 8
  */
 
 #if SIZEOF_VOID_P == 8