From 25d69b57ccef6e598d6a4cd8823ee24d56b2c9f7 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sat, 7 Feb 2009 00:23:17 +0000 Subject: [PATCH] Apparently it is important to define intptr_t and uintptr_t to long instead of int. This is because system heaers like to redefine typedefs and that is an error if they don't exactly match. Use long for intptr_t on all systems where long is the right size. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63984 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Headers/stdint.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/lib/Headers/stdint.h b/lib/Headers/stdint.h index e7b205a0fc..606d396f4d 100644 --- a/lib/Headers/stdint.h +++ b/lib/Headers/stdint.h @@ -70,7 +70,14 @@ typedef uint64_t uint_fast64_t; /* C99 7.18.1.4 Integer types capable of holding object pointers. */ -#if __POINTER_WIDTH__ == 64 +#if (1LL << (__POINTER_WIDTH__-1))-1 == __LONG_MAX__ +/* If the pointer size is equal to long, use long. This is for compatibility + * with many systems which just use long and expect it to work in 32-bit and + * 64-bit mode. If long is not suitable, we use a fixed size type below. + */ +typedef long intptr_t; +typedef unsigned long uintptr_t; +#elif __POINTER_WIDTH__ == 64 typedef int64_t intptr_t; typedef uint64_t uintptr_t; #elif __POINTER_WIDTH__ == 32 -- 2.50.1