]> granicus.if.org Git - clang/commitdiff
Fix for PR4192: fix the definition of int64_t on x86_64 Linux.
authorEli Friedman <eli.friedman@gmail.com>
Wed, 1 Jul 2009 03:36:11 +0000 (03:36 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Wed, 1 Jul 2009 03:36:11 +0000 (03:36 +0000)
Note that I'm guessing that *BSD and Solaris do the same thing as Linux
here, but it's quite possible I'm wrong; if the following testcase
gives an error on x86-64 with gcc for any of those operating systems, please
tell me:

#include <stdint.h>

int64_t x; long x;

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

include/clang/Basic/TargetInfo.h
lib/Basic/TargetInfo.cpp
lib/Basic/Targets.cpp
lib/Frontend/InitPreprocessor.cpp

index a59c60b002248552df2ee4dc5b0a0a6ba45dfe1c..537d553bc2d1a4097e2d48406dfd62959914eeb5 100644 (file)
@@ -76,7 +76,8 @@ public:
     UnsignedLongLong
   };
 protected:
-  IntType SizeType, IntMaxType, UIntMaxType, PtrDiffType, IntPtrType, WCharType;
+  IntType SizeType, IntMaxType, UIntMaxType, PtrDiffType, IntPtrType, WCharType,
+          Int64Type;
 public:
   IntType getSizeType() const { return SizeType; }
   IntType getIntMaxType() const { return IntMaxType; }
@@ -86,6 +87,7 @@ public:
   }
   IntType getIntPtrType() const { return IntPtrType; }
   IntType getWCharType() const { return WCharType; }
+  IntType getInt64Type() const { return Int64Type; }
 
   /// getPointerWidth - Return the width of pointers on this target, for the
   /// specified address space.
index a513cb16886ed5d48d85063d960361cdb762ab25..ba7f190408b29bc9328d8bb6fa2f653a1bf02a72 100644 (file)
@@ -41,6 +41,7 @@ TargetInfo::TargetInfo(const std::string &T) : Triple(T) {
   UIntMaxType = UnsignedLongLong;
   IntPtrType = SignedLong;
   WCharType = SignedInt;
+  Int64Type = SignedLongLong;
   FloatFormat = &llvm::APFloat::IEEEsingle;
   DoubleFormat = &llvm::APFloat::IEEEdouble;
   LongDoubleFormat = &llvm::APFloat::IEEEdouble;
index 286b2e166bf5621667a0ffa20439cbc3facc474f..88dd6f797bc270d68d16ed893243437b68499154 100644 (file)
@@ -549,6 +549,9 @@ class PPC64TargetInfo : public PPCTargetInfo {
 public:
   PPC64TargetInfo(const std::string& triple) : PPCTargetInfo(triple) {
     LongWidth = LongAlign = PointerWidth = PointerAlign = 64;
+    IntMaxType = SignedLong;
+    UIntMaxType = UnsignedLong;
+    Int64Type = SignedLong;
     DescriptionString = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-"
                         "i64:64:64-f32:32:32-f64:64:64-v128:128:128";
   }
@@ -940,11 +943,11 @@ class X86_64TargetInfo : public X86TargetInfo {
 public:
   X86_64TargetInfo(const std::string &triple) : X86TargetInfo(triple) {
     LongWidth = LongAlign = PointerWidth = PointerAlign = 64;
-    DoubleAlign = LongLongAlign = 64;
     LongDoubleWidth = 128;
     LongDoubleAlign = 128;
     IntMaxType = SignedLong;
     UIntMaxType = UnsignedLong;
+    Int64Type = SignedLong;
     RegParmMax = 6;
 
     DescriptionString = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-"
@@ -962,6 +965,16 @@ public:
 };
 } // end anonymous namespace
 
+namespace {
+class DarwinX86_64TargetInfo : public DarwinTargetInfo<X86_64TargetInfo> {
+public:
+  DarwinX86_64TargetInfo(const std::string& triple) 
+      : DarwinTargetInfo<X86_64TargetInfo>(triple) {
+    Int64Type = SignedLongLong;
+  }
+};
+} // end anonymous namespace
+
 namespace {
 class ARMTargetInfo : public TargetInfo {
   enum {
@@ -1363,7 +1376,7 @@ TargetInfo* TargetInfo::CreateTargetInfo(const std::string &T) {
 
   if (T.find("x86_64-") == 0 || T.find("amd64-") == 0) {
     if (isDarwin)
-      return new DarwinTargetInfo<X86_64TargetInfo>(T);
+      return new DarwinX86_64TargetInfo(T);
     if (isLinux)
       return new LinuxTargetInfo<X86_64TargetInfo>(T);
     if (isOpenBSD)
index 05f960735592061a4623f9cfb3d750c590a034d6..e41dfdda07e93661b25751df26ae8c71f66bbb77 100644 (file)
@@ -383,7 +383,7 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
   
   // 16-bit targets doesn't necessarily have a 64-bit type.
   if (TI.getLongLongWidth() == 64)
-    DefineBuiltinMacro(Buf, "__INT64_TYPE__=long long");
+    DefineType("__INT64_TYPE__", TI.getInt64Type(), Buf);
   
   // Add __builtin_va_list typedef.
   {