فهرست منبع

LibC: Fix stdint.h macros on x86_64

x86_64 is an LP64 platform, so its `uint64_t` type is defined to be
`unsigned long`, not `unsigned long long` like on i686. This means that
the `UL` literal suffix should be used instead of `ULL`.

Furthermore, `uintptr_t` is 64 bits wide on x86_64, so defining
`UINTPTR_MAX` to be `UINT32_MAX` is also not correct.
Daniel Bertalan 3 سال پیش
والد
کامیت
23adb7449f
1فایلهای تغییر یافته به همراه32 افزوده شده و 21 حذف شده
  1. 32 21
      Userland/Libraries/LibC/bits/stdint.h

+ 32 - 21
Userland/Libraries/LibC/bits/stdint.h

@@ -49,6 +49,32 @@ typedef __INT_LEAST64_TYPE__ int_least64_t;
 #define __int64_t_defined 1
 #define __uint64_t_defined 1
 
+#define INT8_C(x) x
+#define UINT8_C(x) x
+
+#define INT16_C(x) x
+#define UINT16_C(x) x
+
+#define INT32_C(x) x
+#define UINT32_C(x) x##U
+
+#ifdef __clang__
+#    define __int_c_concat(a, b) a##b
+#    define __int_c(var, suffix) __int_c_concat(var, suffix)
+
+#    define INT64_C(x) __int_c(x, __INT64_C_SUFFIX__)
+#    define UINT64_C(x) __int_c(x, __UINT64_C_SUFFIX__)
+
+#    define INTMAX_C(c) __int_c(c, __INTMAX_C_SUFFIX__)
+#    define UINTMAX_C(c) __int_c(x, __UINTMAX_C_SUFFIX__)
+#else
+#    define INT64_C(x) __INT64_C(x)
+#    define UINT64_C(x) __UINT64_C(x)
+
+#    define INTMAX_C(c) __INTMAX_C(x)
+#    define UINTMAX_C(c) __UINTMAX_C(x)
+#endif
+
 typedef __UINTPTR_TYPE__ uintptr_t;
 typedef __INTPTR_TYPE__ intptr_t;
 
@@ -62,19 +88,19 @@ typedef __INTMAX_TYPE__ intmax_t;
 #define INT8_MIN (-128)
 #define INT16_MIN (-32767 - 1)
 #define INT32_MIN (-2147483647 - 1)
-#define INT64_MIN (-9223372036854775807LL - 1LL)
+#define INT64_MIN (-INT64_C(9223372036854775807) - 1)
 #define INT8_MAX (127)
 #define INT16_MAX (32767)
 #define INT32_MAX (2147483647)
-#define INT64_MAX (9223372036854775807LL)
+#define INT64_MAX (INT64_C(9223372036854775807))
 #define UINT8_MAX (255)
 #define UINT16_MAX (65535)
 #define UINT32_MAX (4294967295U)
-#define UINT64_MAX (18446744073709551615ULL)
+#define UINT64_MAX (UINT64_C(18446744073709551615))
 
-#define INTPTR_MAX INT32_MAX
-#define INTPTR_MIN INT32_MIN
-#define UINTPTR_MAX UINT32_MAX
+#define INTPTR_MAX __INTPTR_MAX__
+#define INTPTR_MIN (-INTPTR_MAX - 1)
+#define UINTPTR_MAX __UINTPTR_MAX__
 
 #define INT_FAST8_MIN INT8_MIN
 #define INT_FAST16_MIN INT16_MIN
@@ -106,21 +132,6 @@ typedef __INTMAX_TYPE__ intmax_t;
 #define UINT_LEAST32_MAX UINT32_MAX
 #define UINT_LEAST64_MAX UINT64_MAX
 
-#define INT8_C(x) x
-#define UINT8_C(x) x
-
-#define INT16_C(x) x
-#define UINT16_C(x) x
-
-#define INT32_C(x) x
-#define UINT32_C(x) x
-
-#define INT64_C(x) x##LL
-#define UINT64_C(x) x##ULL
-
-#define INTMAX_C(c) c##LL
-#define UINTMAX_C(c) c##ULL
-
 #define SIZE_MAX ((size_t)-1)
 
 #define PTRDIFF_MAX __PTRDIFF_MAX__