From: Eli Friedman Date: Sun, 2 Nov 2008 02:43:55 +0000 (+0000) Subject: More fallout from r58501: primary fix is some more corrections to make X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f509d73ecf2c996e257f1a4e23c1282396b0a847;p=clang More fallout from r58501: primary fix is some more corrections to make the types for size_t and ptrdiff_t more accurate. I think all of these are correct, but please compare the defines for __PTRDIFF_TYPE__ and __SIZE_TYPE__ to gcc to double-check; this particularly applies to those on BSD variants, since I'm not sure what they do here; I assume here that they're the same as on Linux. Fixes wchar_t to be "int", not "unsigned int" (which I think is correct on everything but Windows). Fixes ptrdiff_t to be "int" rather than "short" on PIC16; "short" is an somewhat strange choice because it normally gets promoted, and it's not consistent with the choice for size_t. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@58556 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Basic/TargetInfo.cpp b/lib/Basic/TargetInfo.cpp index 522a09dbb1..44150821a8 100644 --- a/lib/Basic/TargetInfo.cpp +++ b/lib/Basic/TargetInfo.cpp @@ -35,10 +35,10 @@ TargetInfo::TargetInfo(const std::string &T) : Triple(T) { LongDoubleWidth = 64; LongDoubleAlign = 64; SizeType = UnsignedLong; + PtrDiffType = SignedLong; IntMaxType = SignedLongLong; UIntMaxType = UnsignedLongLong; - PtrDiffType = SignedLongLong; - WCharType = UnsignedInt; + WCharType = SignedInt; FloatFormat = &llvm::APFloat::IEEEsingle; DoubleFormat = &llvm::APFloat::IEEEdouble; LongDoubleFormat = &llvm::APFloat::IEEEdouble; diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 456c1f8f35..71321f19cc 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -534,7 +534,10 @@ namespace { // x86-32 FreeBSD target class FreeBSDX86_32TargetInfo : public X86_32TargetInfo { public: - FreeBSDX86_32TargetInfo(const std::string& triple) : X86_32TargetInfo(triple) { + FreeBSDX86_32TargetInfo(const std::string& triple) : + X86_32TargetInfo(triple) { + SizeType = UnsignedInt; + PtrDiffType = SignedInt; } virtual void getTargetDefines(std::vector &Defines) const { X86_32TargetInfo::getTargetDefines(Defines); @@ -547,7 +550,10 @@ namespace { // x86-32 DragonFly target class DragonFlyX86_32TargetInfo : public X86_32TargetInfo { public: - DragonFlyX86_32TargetInfo(const std::string& triple) : X86_32TargetInfo(triple) { + DragonFlyX86_32TargetInfo(const std::string& triple) : + X86_32TargetInfo(triple) { + SizeType = UnsignedInt; + PtrDiffType = SignedInt; } virtual void getTargetDefines(std::vector &Defines) const { X86_32TargetInfo::getTargetDefines(Defines); @@ -562,6 +568,8 @@ class LinuxX86_32TargetInfo : public X86_32TargetInfo { public: LinuxX86_32TargetInfo(const std::string& triple) : X86_32TargetInfo(triple) { UserLabelPrefix = ""; + SizeType = UnsignedInt; + PtrDiffType = SignedInt; } virtual void getTargetDefines(std::vector &Defines) const { X86_32TargetInfo::getTargetDefines(Defines); @@ -579,6 +587,8 @@ public: // FIXME: Fix wchar_t. // FIXME: We should probably enable -fms-extensions by default for // this target. + SizeType = UnsignedInt; + PtrDiffType = SignedInt; } virtual void getTargetDefines(std::vector &Defines) const { X86_32TargetInfo::getTargetDefines(Defines); @@ -626,8 +636,7 @@ namespace { // x86-64 FreeBSD target class FreeBSDX86_64TargetInfo : public X86_64TargetInfo { public: - FreeBSDX86_64TargetInfo(const std::string& triple) : X86_64TargetInfo(triple) { - } + FreeBSDX86_64TargetInfo(const std::string& triple) : X86_64TargetInfo(triple) {} virtual void getTargetDefines(std::vector &Defines) const { X86_64TargetInfo::getTargetDefines(Defines); getFreeBSDDefines(Defines, 1, getTargetTriple()); @@ -788,7 +797,10 @@ namespace { class SolarisSparcV8TargetInfo : public SparcV8TargetInfo { public: SolarisSparcV8TargetInfo(const std::string& triple) : - SparcV8TargetInfo(triple) {} + SparcV8TargetInfo(triple) { + SizeType = UnsignedInt; + PtrDiffType = SignedInt; + } virtual void getTargetDefines(std::vector &Defines) const { SparcV8TargetInfo::getTargetDefines(Defines); @@ -810,8 +822,7 @@ namespace { SizeType = UnsignedInt; IntMaxType = SignedLong; UIntMaxType = UnsignedLong; - PtrDiffType = SignedShort; - WCharType = UnsignedInt; + PtrDiffType = SignedInt; DescriptionString = "e-p:16:8:8-i8:8:8-i16:8:8-i32:8:8"; } virtual uint64_t getPointerWidthV(unsigned AddrSpace) const { return 16; }