From: Ken Dyck Date: Fri, 20 Nov 2009 16:49:10 +0000 (+0000) Subject: Avoid unwanted expansion in macros that paste together INT_C(v) and X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fdb4324286651ef03abb404ee8388edae13c8bfa;p=clang Avoid unwanted expansion in macros that paste together INT_C(v) and UINT_C(v) macros. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@89461 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Headers/stdint.h b/lib/Headers/stdint.h index fee7d3c1b8..0502275c0b 100644 --- a/lib/Headers/stdint.h +++ b/lib/Headers/stdint.h @@ -214,7 +214,6 @@ typedef __uint_least8_t uint_fast8_t; /* C99 7.18.1.4 Integer types capable of holding object pointers. */ #define __stdint_join3(a,b,c) a ## b ## c -#define __stdint_exjoin3(a,b,c) __stdint_join3(a,b,c) #define __intn_t(n) __stdint_join3( int, n, _t) #define __uintn_t(n) __stdint_join3(uint, n, _t) @@ -638,8 +637,11 @@ typedef __uintn_t(__INTMAX_WIDTH__) uintmax_t; #endif /* 7.18.4.2 Macros for greatest-width integer constants. */ -#define INTMAX_C(v) __stdint_exjoin3( INT, __INTMAX_WIDTH__, _C(v)) -#define UINTMAX_C(v) __stdint_exjoin3(UINT, __INTMAX_WIDTH__, _C(v)) +#define __INTN_C(n, v) __stdint_join3( INT, n, _C(v)) +#define __UINTN_C(n, v) __stdint_join3(UINT, n, _C(v)) + +#define INTMAX_C(v) __INTN_C(__INTMAX_WIDTH__, v) +#define UINTMAX_C(v) __UINTN_C(__INTMAX_WIDTH__, v) #endif /* __STDC_HOSTED__ */ #endif /* __CLANG_STDINT_H */ diff --git a/test/Preprocessor/stdint.c b/test/Preprocessor/stdint.c index 05b3165d39..930474645f 100644 --- a/test/Preprocessor/stdint.c +++ b/test/Preprocessor/stdint.c @@ -1185,8 +1185,8 @@ // JOIN:WINT_MAX_ 2147483647 // JOIN:WCHAR_MAX_ 2147483647 // JOIN:WCHAR_MIN_ (-2147483647 -1) -// TODO:INTMAX_C_(0) 0LL -// TODO:UINTMAX_C_(0) 0ULL +// JOIN:INTMAX_C_(0) 0LL +// JOIN:UINTMAX_C_(0) 0ULL #include