]> granicus.if.org Git - clang/commitdiff
Parameterize the constant-generating macros in stdint.h with new built-in
authorKen Dyck <ken.dyck@onsemi.com>
Mon, 16 Nov 2009 16:36:33 +0000 (16:36 +0000)
committerKen Dyck <ken.dyck@onsemi.com>
Mon, 16 Nov 2009 16:36:33 +0000 (16:36 +0000)
__INTn_C_SUFFIX__ macros that are defined for types with corresponding
constant suffixes (i.e. long and long long).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@88914 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Frontend/InitPreprocessor.cpp
lib/Headers/stdint.h
test/Preprocessor/init.c
test/Preprocessor/stdint.c

index 69680491319d41411abf71fea5f5801ba167cd03..9648620ea076936020661400043f4918bd9c1d6f 100644 (file)
@@ -240,8 +240,16 @@ static void DefineType(const char *MacroName, TargetInfo::IntType Ty,
 static void DefineExactWidthIntType(TargetInfo::IntType Ty, 
                                const TargetInfo &TI, std::vector<char> &Buf) {
   char MacroBuf[60];
-  sprintf(MacroBuf, "__INT%d_TYPE__", TI.getTypeWidth(Ty));
+  int TypeWidth = TI.getTypeWidth(Ty);
+  sprintf(MacroBuf, "__INT%d_TYPE__", TypeWidth);
   DefineType(MacroBuf, Ty, Buf);
+
+
+  const char *ConstSuffix = TargetInfo::getTypeConstantSuffix(Ty);
+  if (strlen(ConstSuffix) > 0) {
+    sprintf(MacroBuf, "__INT%d_C_SUFFIX__=%s", TypeWidth, ConstSuffix);
+    DefineBuiltinMacro(Buf, MacroBuf);
+  }
 }
 
 static void InitializePredefinedMacros(const TargetInfo &TI,
index b404e3dfdf78ec10ab5f602a824cb52721ef7c54..419dc0b91218d8ef916e55e263a13deaf37b2ba4 100644 (file)
@@ -247,8 +247,6 @@ typedef __UINTMAX_TYPE__ uintmax_t;
 
 
 #ifdef __INT64_TYPE__
-/* FIXME: predefine suffix based on type*/
-# define __INT64_C_SUFFIX__ LL
 # ifdef __INT64_C_SUFFIX__
 #  define __int64_c_suffix __INT64_C_SUFFIX__
 #  define __int32_c_suffix __INT64_C_SUFFIX__
@@ -274,8 +272,6 @@ typedef __UINTMAX_TYPE__ uintmax_t;
 
 
 #ifdef __INT56_TYPE__
-/* FIXME: predefine suffix based on type */
-# define __INT56_C_SUFFIX__ L
 # ifdef __INT56_C_SUFFIX__
 #  define INT56_C(v) __int_c(v, __INT56_C_SUFFIX__)
 #  define UINT56_C(v) __uint_c(v, __INT56_C_SUFFIX__)
@@ -293,8 +289,6 @@ typedef __UINTMAX_TYPE__ uintmax_t;
 
 
 #ifdef __INT48_TYPE__
-/* FIXME: predefine suffix based on type */
-# define __INT48_C_SUFFIX__ L
 # ifdef __INT48_C_SUFFIX__
 #  define INT48_C(v) __int_c(v, __INT48_C_SUFFIX__)
 #  define UINT48_C(v) __uint_c(v, __INT48_C_SUFFIX__)
@@ -312,8 +306,6 @@ typedef __UINTMAX_TYPE__ uintmax_t;
 
 
 #ifdef __INT40_TYPE__
-/* FIXME: predefine suffix based on type */
-# define __INT40_C_SUFFIX__ L
 # ifdef __INT40_C_SUFFIX__
 #  define INT40_C(v) __int_c(v, __INT40_C_SUFFIX__)
 #  define UINT40_C(v) __uint_c(v, __INT40_C_SUFFIX__)
index b88ea06cf3267544b009363d44fbb20945dfbb26..100e27461c5184d769e9eb412edb520989041a77 100644 (file)
 // ARM:#define __FLT_RADIX__ 2
 // ARM:#define __INT16_TYPE__ short
 // ARM:#define __INT32_TYPE__ int
+// ARM:#define __INT64_C_SUFFIX__ LL
 // ARM:#define __INT64_TYPE__ long long int
 // ARM:#define __INT8_TYPE__ char
 // ARM:#define __INTMAX_MAX__ 9223372036854775807LL
 // BFIN:#define __FLT_RADIX__ 2
 // BFIN:#define __INT16_TYPE__ short
 // BFIN:#define __INT32_TYPE__ int
+// BFIN:#define __INT64_C_SUFFIX__ LL
 // BFIN:#define __INT64_TYPE__ long long int
 // BFIN:#define __INT8_TYPE__ char
 // BFIN:#define __INTMAX_MAX__ 9223372036854775807LL
 // I386:#define __FLT_RADIX__ 2
 // I386:#define __INT16_TYPE__ short
 // I386:#define __INT32_TYPE__ int
+// I386:#define __INT64_C_SUFFIX__ LL
 // I386:#define __INT64_TYPE__ long long int
 // I386:#define __INT8_TYPE__ char
 // I386:#define __INTMAX_MAX__ 9223372036854775807LL
 // MSP430:#define __FLT_MIN__ 1.17549435e-38F
 // MSP430:#define __FLT_RADIX__ 2
 // MSP430:#define __INT16_TYPE__ short
+// MSP430:#define __INT32_C_SUFFIX__ L
 // MSP430:#define __INT32_TYPE__ long int
 // MSP430:#define __INT8_TYPE__ char
 // MSP430:#define __INTMAX_MAX__ 2147483647L
 // PIC16:#define __FLT_MIN__ 1.17549435e-38F
 // PIC16:#define __FLT_RADIX__ 2
 // PIC16:#define __INT16_TYPE__ short
+// PIC16:#define __INT32_C_SUFFIX__ L
 // PIC16:#define __INT32_TYPE__ long int
 // PIC16:#define __INT8_TYPE__ char
 // PIC16:#define __INTMAX_MAX__ 2147483647L
 // PPC64:#define __FLT_RADIX__ 2
 // PPC64:#define __INT16_TYPE__ short
 // PPC64:#define __INT32_TYPE__ int
+// PPC64:#define __INT64_C_SUFFIX__ L
 // PPC64:#define __INT64_TYPE__ long int
 // PPC64:#define __INT8_TYPE__ char
 // PPC64:#define __INTMAX_MAX__ 9223372036854775807L
 // PPC:#define __FLT_RADIX__ 2
 // PPC:#define __INT16_TYPE__ short
 // PPC:#define __INT32_TYPE__ int
+// PPC:#define __INT64_C_SUFFIX__ LL
 // PPC:#define __INT64_TYPE__ long long int
 // PPC:#define __INT8_TYPE__ char
 // PPC:#define __INTMAX_MAX__ 9223372036854775807LL
 // S390X:#define __FLT_RADIX__ 2
 // S390X:#define __INT16_TYPE__ short
 // S390X:#define __INT32_TYPE__ int
+// S390X:#define __INT64_C_SUFFIX__ L
 // S390X:#define __INT64_TYPE__ long int
 // S390X:#define __INT8_TYPE__ char
 // S390X:#define __INTMAX_MAX__ 9223372036854775807LL
 // SPARC:#define __FLT_RADIX__ 2
 // SPARC:#define __INT16_TYPE__ short
 // SPARC:#define __INT32_TYPE__ int
+// SPARC:#define __INT64_C_SUFFIX__ LL
 // SPARC:#define __INT64_TYPE__ long long int
 // SPARC:#define __INT8_TYPE__ char
 // SPARC:#define __INTMAX_MAX__ 9223372036854775807LL
 // X86_64:#define __FLT_RADIX__ 2
 // X86_64:#define __INT16_TYPE__ short
 // X86_64:#define __INT32_TYPE__ int
+// X86_64:#define __INT64_C_SUFFIX__ L
 // X86_64:#define __INT64_TYPE__ long int
 // X86_64:#define __INT8_TYPE__ char
 // X86_64:#define __INTMAX_MAX__ 9223372036854775807L
index 2349c32b5e01095a7b62a1c8252d0a5e691c35c5..faa5f8e16f988182da1d991a5e744f48c3618386 100644 (file)
 // MSP430:UINT8_C_(0) (0U)
 // MSP430:INT16_C_(0) (0)
 // MSP430:UINT16_C_(0) (0U)
-// MSP430:INT32_C_(0) (0)
-// MSP430:UINT32_C_(0) (0U)
+// MSP430:INT32_C_(0) (0L)
+// MSP430:UINT32_C_(0) (0UL)
 // MSP430:INT64_C_(0) INT64_C(0)
 // MSP430:UINT64_C_(0) UINT64_C(0)
 //
 // PIC16:UINT8_C_(0) (0U)
 // PIC16:INT16_C_(0) (0)
 // PIC16:UINT16_C_(0) (0U)
-// PIC16:INT32_C_(0) (0)
-// PIC16:UINT32_C_(0) (0U)
+// PIC16:INT32_C_(0) (0L)
+// PIC16:UINT32_C_(0) (0UL)
 // PIC16:INT64_C_(0) INT64_C(0)
 // PIC16:UINT64_C_(0) UINT64_C(0)
 //
 // PPC64:UINT16_C_(0) (0U)
 // PPC64:INT32_C_(0) (0)
 // PPC64:UINT32_C_(0) (0U)
-// PPC64:INT64_C_(0) (0LL)
-// PPC64:UINT64_C_(0) (0ULL)
+// PPC64:INT64_C_(0) (0L)
+// PPC64:UINT64_C_(0) (0UL)
 //
 // PPC64:INTMAX_C_(0) (0LL)
 // PPC64:UINTMAX_C_(0) (0ULL)
 // S390X:UINT16_C_(0) (0U)
 // S390X:INT32_C_(0) (0)
 // S390X:UINT32_C_(0) (0U)
-// S390X:INT64_C_(0) (0LL)
-// S390X:UINT64_C_(0) (0ULL)
+// S390X:INT64_C_(0) (0L)
+// S390X:UINT64_C_(0) (0UL)
 //
 // S390X:INTMAX_C_(0) (0LL)
 // S390X:UINTMAX_C_(0) (0ULL)
 // X86_64:UINT16_C_(0) (0U)
 // X86_64:INT32_C_(0) (0)
 // X86_64:UINT32_C_(0) (0U)
-// X86_64:INT64_C_(0) (0LL)
-// X86_64:UINT64_C_(0) (0ULL)
+// X86_64:INT64_C_(0) (0L)
+// X86_64:UINT64_C_(0) (0UL)
 //
 // X86_64:INTMAX_C_(0) (0LL)
 // X86_64:UINTMAX_C_(0) (0ULL)