]> granicus.if.org Git - clang/commitdiff
Give TargetInfo a new IntPtrType to hold the intptr_t type for
authorChris Lattner <sabre@nondot.org>
Fri, 13 Feb 2009 22:28:55 +0000 (22:28 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 13 Feb 2009 22:28:55 +0000 (22:28 +0000)
a target.

Make Preprocessor.cpp define a new __INTPTR_TYPE__ macro based on this.

On linux/32, set intptr_t to int, instead of long.  This fixes PR3563.

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

include/clang/Basic/TargetInfo.h
lib/Basic/TargetInfo.cpp
lib/Basic/Targets.cpp
lib/Headers/stdint.h
lib/Lex/Preprocessor.cpp

index a0bd74b421b7fb3ffa63070fd4b3ce9351525073..633bacf196a304e07205510a19ec7846a6c14ebb 100644 (file)
@@ -72,7 +72,7 @@ public:
     UnsignedLongLong
   };
 protected:
-  IntType SizeType, IntMaxType, UIntMaxType, PtrDiffType, WCharType;
+  IntType SizeType, IntMaxType, UIntMaxType, PtrDiffType, IntPtrType, WCharType;
 public:
   IntType getSizeType() const { return SizeType; }
   IntType getIntMaxType() const { return IntMaxType; }
@@ -80,6 +80,7 @@ public:
   IntType getPtrDiffType(unsigned AddrSpace) const {
     return AddrSpace == 0 ? PtrDiffType : getPtrDiffTypeV(AddrSpace);
   }
+  IntType getIntPtrType() const { return IntPtrType; }
   IntType getWCharType() const { return WCharType; }
 
   /// isCharSigned - Return true if 'char' is 'signed char' or false if it is
index 378a91503bf1108c002991999780c8057ae5eccf..82b6c190cdac96fe4ae20f215b490fadbf9ef344 100644 (file)
@@ -39,6 +39,7 @@ TargetInfo::TargetInfo(const std::string &T) : Triple(T) {
   PtrDiffType = SignedLong;
   IntMaxType = SignedLongLong;
   UIntMaxType = UnsignedLongLong;
+  IntPtrType = SignedLong;
   WCharType = SignedInt;
   FloatFormat = &llvm::APFloat::IEEEsingle;
   DoubleFormat = &llvm::APFloat::IEEEdouble;
index c72982bf2216fb7f6378dab84ad68a9bf8f41920..9e81ed7db2fd5a11d3c3dcdc6707ca2335de4143 100644 (file)
@@ -629,6 +629,7 @@ public:
     UserLabelPrefix = "";
     SizeType = UnsignedInt;
     PtrDiffType = SignedInt;
+    IntPtrType = SignedInt;
   }
   virtual void getTargetDefines(std::vector<char> &Defines) const {
     X86_32TargetInfo::getTargetDefines(Defines);
@@ -937,6 +938,7 @@ namespace {
       SizeType = UnsignedInt;
       IntMaxType = SignedLong;
       UIntMaxType = UnsignedLong;
+      IntPtrType = SignedShort;
       PtrDiffType = SignedInt;
       DescriptionString = "e-p:16:8:8-i8:8:8-i16:8:8-i32:8:8";
     }
index 3eb72bb57b56aceb8f7c11c6fbbde0e92951b64f..9e5bfd700f83fe6098205e4c25942af6744df85a 100644 (file)
@@ -70,25 +70,8 @@ typedef uint64_t uint_fast64_t;
 
 /* C99 7.18.1.4 Integer types capable of holding object pointers.
  */
-#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
-typedef int32_t  intptr_t;
-typedef uint32_t uintptr_t;
-#elif __POINTER_WIDTH__ == 16
-typedef int16_t  intptr_t;
-typedef uint16_t uintptr_t;
-#else
-#error "unknown or unset pointer width!"
-#endif
+typedef __INTPTR_TYPE__          intptr_t;
+typedef unsigned __INTPTR_TYPE__ uintptr_t;
 
 /* C99 7.18.1.5 Greatest-width integer types.
  */
index f16d83c5a2e2c46fe198f4d6f2c3b0737d214ac0..d769720634dde026fe20f9608ac893b5c290a47a 100644 (file)
@@ -557,6 +557,7 @@ static void InitializePredefinedMacros(Preprocessor &PP,
   DefineType("__INTMAX_TYPE__", TI.getIntMaxType(), Buf);
   DefineType("__UINTMAX_TYPE__", TI.getUIntMaxType(), Buf);
   DefineType("__PTRDIFF_TYPE__", TI.getPtrDiffType(0), Buf);
+  DefineType("__INTPTR_TYPE__", TI.getIntPtrType(), Buf);
   DefineType("__SIZE_TYPE__", TI.getSizeType(), Buf);
   DefineType("__WCHAR_TYPE__", TI.getWCharType(), Buf);
   // FIXME: TargetInfo hookize __WINT_TYPE__.