From a2e92846f114ae639e1b285b4ef5d763dd2596d4 Mon Sep 17 00:00:00 2001 From: Ken Dyck Date: Fri, 20 Nov 2009 16:44:38 +0000 Subject: [PATCH] Avoid unwanted expansion in macros that paste together INT_MIN, INT_MAX, and UINT_MAX defintions. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@89460 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Headers/stdint.h | 29 ++++++++++++++++------------- test/Preprocessor/stdint.c | 30 +++++++++++++++--------------- 2 files changed, 31 insertions(+), 28 deletions(-) diff --git a/lib/Headers/stdint.h b/lib/Headers/stdint.h index 61afe0d45d..fee7d3c1b8 100644 --- a/lib/Headers/stdint.h +++ b/lib/Headers/stdint.h @@ -605,33 +605,36 @@ typedef __uintn_t(__INTMAX_WIDTH__) uintmax_t; /* C99 7.18.2.4 Limits of integer types capable of holding object pointers. */ /* C99 7.18.3 Limits of other integer types. */ +#define __INTN_MIN(n) __stdint_join3( INT, n, _MIN) +#define __INTN_MAX(n) __stdint_join3( INT, n, _MAX) +#define __UINTN_MAX(n) __stdint_join3(UINT, n, _MAX) -#define INTPTR_MIN __stdint_exjoin3( INT, __INTPTR_WIDTH__, _MIN) -#define INTPTR_MAX __stdint_exjoin3( INT, __INTPTR_WIDTH__, _MAX) -#define UINTPTR_MAX __stdint_exjoin3(UINT, __INTPTR_WIDTH__, _MAX) -#define PTRDIFF_MIN __stdint_exjoin3( INT, __PTRDIFF_WIDTH__, _MIN) -#define PTRDIFF_MAX __stdint_exjoin3( INT, __PTRDIFF_WIDTH__, _MAX) -#define SIZE_MAX __stdint_exjoin3(UINT, __SIZE_WIDTH__, _MAX) +#define INTPTR_MIN __INTN_MIN(__INTPTR_WIDTH__) +#define INTPTR_MAX __INTN_MAX(__INTPTR_WIDTH__) +#define UINTPTR_MAX __UINTN_MAX(__INTPTR_WIDTH__) +#define PTRDIFF_MIN __INTN_MIN(__PTRDIFF_WIDTH__) +#define PTRDIFF_MAX __INTN_MAX(__PTRDIFF_WIDTH__) +#define SIZE_MAX __UINTN_MAX(__SIZE_WIDTH__) /* C99 7.18.2.5 Limits of greatest-width integer types. */ -#define INTMAX_MIN __stdint_exjoin3( INT, __INTMAX_WIDTH__, _MIN) -#define INTMAX_MAX __stdint_exjoin3( INT, __INTMAX_WIDTH__, _MAX) -#define UINTMAX_MAX __stdint_exjoin3(UINT, __INTMAX_WIDTH__, _MAX) +#define INTMAX_MIN __INTN_MIN(__INTMAX_WIDTH__) +#define INTMAX_MAX __INTN_MAX(__INTMAX_WIDTH__) +#define UINTMAX_MAX __UINTN_MAX(__INTMAX_WIDTH__) /* C99 7.18.3 Limits of other integer types. */ #define SIG_ATOMIC_MIN INT32_MIN #define SIG_ATOMIC_MAX INT32_MAX -#define WINT_MIN __stdint_exjoin3(INT, __WINT_WIDTH__, _MIN) -#define WINT_MAX __stdint_exjoin3(INT, __WINT_WIDTH__, _MAX) +#define WINT_MIN __INTN_MIN(__WINT_WIDTH__) +#define WINT_MAX __INTN_MAX(__WINT_WIDTH__) /* FIXME: if we ever support a target with unsigned wchar_t, this should be * 0 .. Max. */ #ifndef WCHAR_MAX -#define WCHAR_MAX __stdint_exjoin3(INT, __WCHAR_WIDTH__, _MAX) +#define WCHAR_MAX __INTN_MAX(__WCHAR_WIDTH__) #endif #ifndef WCHAR_MIN -#define WCHAR_MIN __stdint_exjoin3(INT, __WCHAR_WIDTH__, _MIN) +#define WCHAR_MIN __INTN_MIN(__WCHAR_WIDTH__) #endif /* 7.18.4.2 Macros for greatest-width integer constants. */ diff --git a/test/Preprocessor/stdint.c b/test/Preprocessor/stdint.c index 3c5fc76c20..05b3165d39 100644 --- a/test/Preprocessor/stdint.c +++ b/test/Preprocessor/stdint.c @@ -1170,21 +1170,21 @@ // JOIN:typedef uint32_t uintptr_t; // JOIN:typedef int64_t intmax_t; // JOIN:typedef uint64_t uintmax_t; -// TODO:INTPTR_MIN_ (-2147483647 -1) -// TODO:INTPTR_MAX_ 2147483647 -// TODO:UINTPTR_MAX_ 4294967295U -// TODO:PTRDIFF_MIN_ (-2147483647 -1) -// TODO:PTRDIFF_MAX_ 2147483647 -// TODO:SIZE_MAX_ 4294967295U -// TODO:INTMAX_MIN_ (-9223372036854775807LL -1) -// TODO:INTMAX_MAX_ 9223372036854775807LL -// TODO:UINTMAX_MAX_ 18446744073709551615ULL -// TODO:SIG_ATOMIC_MIN_ (-2147483647 -1) -// TODO:SIG_ATOMIC_MAX_ 2147483647 -// TODO:WINT_MIN_ (-2147483647 -1) -// TODO:WINT_MAX_ 2147483647 -// TODO:WCHAR_MAX_ 2147483647 -// TODO:WCHAR_MIN_ (-2147483647 -1) +// JOIN:INTPTR_MIN_ (-2147483647 -1) +// JOIN:INTPTR_MAX_ 2147483647 +// JOIN:UINTPTR_MAX_ 4294967295U +// JOIN:PTRDIFF_MIN_ (-2147483647 -1) +// JOIN:PTRDIFF_MAX_ 2147483647 +// JOIN:SIZE_MAX_ 4294967295U +// JOIN:INTMAX_MIN_ (-9223372036854775807LL -1) +// JOIN:INTMAX_MAX_ 9223372036854775807LL +// JOIN:UINTMAX_MAX_ 18446744073709551615ULL +// JOIN:SIG_ATOMIC_MIN_ (-2147483647 -1) +// JOIN:SIG_ATOMIC_MAX_ 2147483647 +// JOIN:WINT_MIN_ (-2147483647 -1) +// JOIN:WINT_MAX_ 2147483647 +// JOIN:WCHAR_MAX_ 2147483647 +// JOIN:WCHAR_MIN_ (-2147483647 -1) // TODO:INTMAX_C_(0) 0LL // TODO:UINTMAX_C_(0) 0ULL -- 2.50.1