[PATCH] Fix cygwin-stdint.h

Yaakov Selkowitz yselkowi@redhat.com
Tue Aug 12 20:00:00 GMT 2014


This patch fixes an error in r197168 where type definitions were made 
dependent on the host architecture instead of the target.  This causes
cross-compilation issues, particularly in a --host=x86_64-* 
--target=i686-pc-cygwin configuration.

Attached patch was tested by comparing output of './gcc/xgcc -B ./gcc 
-dM -E - </dev/null' between native and cross compilers for each of the 
Cygwin targets.

-- 
Yaakov Selkowitz
Associate Software Engineer, ARM
Red Hat, Inc.
-------------- next part --------------
2014-08-12  Yaakov Selkowitz  <yselkowi@redhat.com>

	* config/i386/cygwin-stdint.h: Throughout, make type
	definitions dependent on target architecture, not host.

Index: gcc/config/i386/cygwin-stdint.h
===================================================================
--- gcc/config/i386/cygwin-stdint.h	(revision 213874)
+++ gcc/config/i386/cygwin-stdint.h	(working copy)
@@ -24,20 +24,12 @@
 #define INT8_TYPE "signed char"
 #define INT16_TYPE "short int"
 #define INT32_TYPE "int"
-#ifdef __x86_64__
-#define INT64_TYPE "long int"
-#else
-#define INT64_TYPE "long long int"
-#endif
+#define INT64_TYPE (TARGET_64BIT ? "long int" : "long long int")
 
 #define UINT8_TYPE "unsigned char"
 #define UINT16_TYPE "short unsigned int"
 #define UINT32_TYPE "unsigned int"
-#ifdef __x86_64__
-#define UINT64_TYPE "long unsigned int"
-#else
-#define UINT64_TYPE "long long unsigned int"
-#endif
+#define UINT64_TYPE (TARGET_64BIT ? "long unsigned int" : "long long unsigned int")
 
 /* Minimum-width integer types */
 
@@ -44,51 +36,26 @@
 #define INT_LEAST8_TYPE "signed char"
 #define INT_LEAST16_TYPE "short int"
 #define INT_LEAST32_TYPE "int"
-#ifdef __x86_64__
-#define INT_LEAST64_TYPE "long int"
-#else
-#define INT_LEAST64_TYPE "long long int"
-#endif
+#define INT_LEAST64_TYPE (TARGET_64BIT ? "long int" : "long long int")
 
 #define UINT_LEAST8_TYPE "unsigned char"
 #define UINT_LEAST16_TYPE "short unsigned int"
 #define UINT_LEAST32_TYPE "unsigned int"
-#ifdef __x86_64__
-#define UINT_LEAST64_TYPE "long unsigned int"
-#else
-#define UINT_LEAST64_TYPE "long long unsigned int"
-#endif
+#define UINT_LEAST64_TYPE (TARGET_64BIT ? "long unsigned int" : "long long unsigned int")
 
 /* Fastest minimum-width integer types */
 
 #define INT_FAST8_TYPE "signed char"
-#ifdef __x86_64__
-#define INT_FAST16_TYPE "long int"
-#define INT_FAST32_TYPE "long int"
-#define INT_FAST64_TYPE "long int"
-#else
-#define INT_FAST16_TYPE "int"
-#define INT_FAST32_TYPE "int"
-#define INT_FAST64_TYPE "long long int"
-#endif
+#define INT_FAST16_TYPE (TARGET_64BIT ? "long int" : "int")
+#define INT_FAST32_TYPE (TARGET_64BIT ? "long int" : "int")
+#define INT_FAST64_TYPE (TARGET_64BIT ? "long int" : "long long int")
 
 #define UINT_FAST8_TYPE "unsigned char"
-#ifdef __x86_64__
-#define UINT_FAST16_TYPE "long unsigned int"
-#define UINT_FAST32_TYPE "long unsigned int"
-#define UINT_FAST64_TYPE "long unsigned int"
-#else
-#define UINT_FAST16_TYPE "unsigned int"
-#define UINT_FAST32_TYPE "unsigned int"
-#define UINT_FAST64_TYPE "long long unsigned int"
-#endif
+#define UINT_FAST16_TYPE (TARGET_64BIT ? "long unsigned int" : "unsigned int")
+#define UINT_FAST32_TYPE (TARGET_64BIT ? "long unsigned int" : "unsigned int")
+#define UINT_FAST64_TYPE (TARGET_64BIT ? "long unsigned int" : "long long unsigned int")
 
 /* Integer types capable of holding object pointers */
 
-#ifdef __x86_64__
-#define INTPTR_TYPE "long int"
-#define UINTPTR_TYPE "long unsigned int"
-#else
-#define INTPTR_TYPE "int"
-#define UINTPTR_TYPE "unsigned int"
-#endif
+#define INTPTR_TYPE (TARGET_64BIT ? "long int" : "int")
+#define UINTPTR_TYPE (TARGET_64BIT ? "long unsigned int" : "unsigned int")


More information about the Gcc-patches mailing list