diff options
| author | Saleem Abdulrasool <compnerd@compnerd.org> | 2018-12-12 17:05:20 +0000 |
|---|---|---|
| committer | Saleem Abdulrasool <compnerd@compnerd.org> | 2018-12-12 17:05:20 +0000 |
| commit | d4f7d6a7a1ba16287a6a18422b8921534d846d18 (patch) | |
| tree | 6154e1f464b7ed7bd66f5423249e2273b440a0bc | |
| parent | 147b743602e480845d9ae10ccd35977070614e5a (diff) | |
| download | bcm5719-llvm-d4f7d6a7a1ba16287a6a18422b8921534d846d18.tar.gz bcm5719-llvm-d4f7d6a7a1ba16287a6a18422b8921534d846d18.zip | |
Basic: make `int_least64_t` and `int_fast64_t` match on Darwin
The Darwin targets use `int64_t` and `uint64_t` to define the `int_least64_t`
and `int_fast64_t` types. The underlying type is actually a `long long`. Match
the types to allow the printf specifiers to work properly and have the compiler
vended macros match the implementation on the target.
llvm-svn: 348939
| -rw-r--r-- | clang/lib/Basic/Targets/OSTargets.h | 9 | ||||
| -rw-r--r-- | clang/test/Preprocessor/init.c | 24 |
2 files changed, 21 insertions, 12 deletions
diff --git a/clang/lib/Basic/Targets/OSTargets.h b/clang/lib/Basic/Targets/OSTargets.h index 5510ca36984..42ce89669fd 100644 --- a/clang/lib/Basic/Targets/OSTargets.h +++ b/clang/lib/Basic/Targets/OSTargets.h @@ -133,6 +133,15 @@ public: /// is very similar to ELF's "protected"; Darwin requires a "weak" /// attribute on declarations that can be dynamically replaced. bool hasProtectedVisibility() const override { return false; } + + TargetInfo::IntType getLeastIntTypeByWidth(unsigned BitWidth, + bool IsSigned) const final { + // Darwin uses `long long` for `int_least64_t` and `int_fast64_t`. + return BitWidth == 64 + ? (IsSigned ? TargetInfo::SignedLongLong + : TargetInfo::UnsignedLongLong) + : TargetInfo::getLeastIntTypeByWidth(BitWidth, IsSigned); + } }; // DragonFlyBSD Target diff --git a/clang/test/Preprocessor/init.c b/clang/test/Preprocessor/init.c index f5f46e23eca..ff48b118680 100644 --- a/clang/test/Preprocessor/init.c +++ b/clang/test/Preprocessor/init.c @@ -1331,10 +1331,10 @@ // AARCH64-DARWIN: #define __INT_FAST32_FMTi__ "i" // AARCH64-DARWIN: #define __INT_FAST32_MAX__ 2147483647 // AARCH64-DARWIN: #define __INT_FAST32_TYPE__ int -// AARCH64-DARWIN: #define __INT_FAST64_FMTd__ "ld" -// AARCH64-DARWIN: #define __INT_FAST64_FMTi__ "li" -// AARCH64-DARWIN: #define __INT_FAST64_MAX__ 9223372036854775807L -// AARCH64-DARWIN: #define __INT_FAST64_TYPE__ long int +// AARCH64-DARWIN: #define __INT_FAST64_FMTd__ "lld" +// AARCH64-DARWIN: #define __INT_FAST64_FMTi__ "lli" +// AARCH64-DARWIN: #define __INT_FAST64_MAX__ 9223372036854775807LL +// AARCH64-DARWIN: #define __INT_FAST64_TYPE__ long long int // AARCH64-DARWIN: #define __INT_FAST8_FMTd__ "hhd" // AARCH64-DARWIN: #define __INT_FAST8_FMTi__ "hhi" // AARCH64-DARWIN: #define __INT_FAST8_MAX__ 127 @@ -1347,10 +1347,10 @@ // AARCH64-DARWIN: #define __INT_LEAST32_FMTi__ "i" // AARCH64-DARWIN: #define __INT_LEAST32_MAX__ 2147483647 // AARCH64-DARWIN: #define __INT_LEAST32_TYPE__ int -// AARCH64-DARWIN: #define __INT_LEAST64_FMTd__ "ld" -// AARCH64-DARWIN: #define __INT_LEAST64_FMTi__ "li" -// AARCH64-DARWIN: #define __INT_LEAST64_MAX__ 9223372036854775807L -// AARCH64-DARWIN: #define __INT_LEAST64_TYPE__ long int +// AARCH64-DARWIN: #define __INT_LEAST64_FMTd__ "lld" +// AARCH64-DARWIN: #define __INT_LEAST64_FMTi__ "lli" +// AARCH64-DARWIN: #define __INT_LEAST64_MAX__ 9223372036854775807LL +// AARCH64-DARWIN: #define __INT_LEAST64_TYPE__ long long int // AARCH64-DARWIN: #define __INT_LEAST8_FMTd__ "hhd" // AARCH64-DARWIN: #define __INT_LEAST8_FMTi__ "hhi" // AARCH64-DARWIN: #define __INT_LEAST8_MAX__ 127 @@ -1418,16 +1418,16 @@ // AARCH64-DARWIN: #define __UINT_FAST16_TYPE__ unsigned short // AARCH64-DARWIN: #define __UINT_FAST32_MAX__ 4294967295U // AARCH64-DARWIN: #define __UINT_FAST32_TYPE__ unsigned int -// AARCH64-DARWIN: #define __UINT_FAST64_MAX__ 18446744073709551615UL -// AARCH64-DARWIN: #define __UINT_FAST64_TYPE__ long unsigned int +// AARCH64-DARWIN: #define __UINT_FAST64_MAX__ 18446744073709551615ULL +// AARCH64-DARWIN: #define __UINT_FAST64_TYPE__ long long unsigned int // AARCH64-DARWIN: #define __UINT_FAST8_MAX__ 255 // AARCH64-DARWIN: #define __UINT_FAST8_TYPE__ unsigned char // AARCH64-DARWIN: #define __UINT_LEAST16_MAX__ 65535 // AARCH64-DARWIN: #define __UINT_LEAST16_TYPE__ unsigned short // AARCH64-DARWIN: #define __UINT_LEAST32_MAX__ 4294967295U // AARCH64-DARWIN: #define __UINT_LEAST32_TYPE__ unsigned int -// AARCH64-DARWIN: #define __UINT_LEAST64_MAX__ 18446744073709551615UL -// AARCH64-DARWIN: #define __UINT_LEAST64_TYPE__ long unsigned int +// AARCH64-DARWIN: #define __UINT_LEAST64_MAX__ 18446744073709551615ULL +// AARCH64-DARWIN: #define __UINT_LEAST64_TYPE__ long long unsigned int // AARCH64-DARWIN: #define __UINT_LEAST8_MAX__ 255 // AARCH64-DARWIN: #define __UINT_LEAST8_TYPE__ unsigned char // AARCH64-DARWIN: #define __USER_LABEL_PREFIX__ _ |

