forked from OSchip/llvm-project
Fix for PR4192: fix the definition of int64_t on x86_64 Linux.
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; llvm-svn: 74583
This commit is contained in:
parent
f95fa1b721
commit
2857ccbaa7
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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.
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue