diff options
-rw-r--r-- | lib/Frontend/InitPreprocessor.cpp | 6 | ||||
-rw-r--r-- | test/Headers/int64-type.c | 4 | ||||
-rw-r--r-- | test/Preprocessor/init.c | 2 | ||||
-rw-r--r-- | test/Preprocessor/stdint.c | 16 |
4 files changed, 19 insertions, 9 deletions
diff --git a/lib/Frontend/InitPreprocessor.cpp b/lib/Frontend/InitPreprocessor.cpp index 0745568cb5..889b6e52a4 100644 --- a/lib/Frontend/InitPreprocessor.cpp +++ b/lib/Frontend/InitPreprocessor.cpp @@ -204,6 +204,12 @@ static void DefineTypeSizeof(llvm::StringRef MacroName, unsigned BitWidth, static void DefineExactWidthIntType(TargetInfo::IntType Ty, const TargetInfo &TI, MacroBuilder &Builder) { int TypeWidth = TI.getTypeWidth(Ty); + + // Use the target specified int64 type, when appropriate, so that [u]int64_t + // ends up being defined in terms of the correct type. + if (TypeWidth == 64) + Ty = TI.getInt64Type(); + DefineType("__INT" + llvm::Twine(TypeWidth) + "_TYPE__", Ty, Builder); llvm::StringRef ConstSuffix(TargetInfo::getTypeConstantSuffix(Ty)); diff --git a/test/Headers/int64-type.c b/test/Headers/int64-type.c new file mode 100644 index 0000000000..16b42d2d7f --- /dev/null +++ b/test/Headers/int64-type.c @@ -0,0 +1,4 @@ +// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -verify %s -ffreestanding + +#include <stdint.h> +typedef unsigned long long uint64_t; diff --git a/test/Preprocessor/init.c b/test/Preprocessor/init.c index 8a3e89e49a..8283671b66 100644 --- a/test/Preprocessor/init.c +++ b/test/Preprocessor/init.c @@ -838,7 +838,7 @@ // S390X:#define __INT16_TYPE__ short // S390X:#define __INT32_TYPE__ int // S390X:#define __INT64_C_SUFFIX__ L -// S390X:#define __INT64_TYPE__ long int +// S390X:#define __INT64_TYPE__ long long int // S390X:#define __INT8_TYPE__ char // S390X:#define __INTMAX_MAX__ 9223372036854775807LL // S390X:#define __INTMAX_TYPE__ long long int diff --git a/test/Preprocessor/stdint.c b/test/Preprocessor/stdint.c index f7570ac526..f8bb921a68 100644 --- a/test/Preprocessor/stdint.c +++ b/test/Preprocessor/stdint.c @@ -738,8 +738,8 @@ // // RUN: %clang_cc1 -E -ffreestanding -triple=s390x-none-none %s | FileCheck -check-prefix S390X %s // -// S390X:typedef signed long int int64_t; -// S390X:typedef unsigned long int uint64_t; +// S390X:typedef signed long long int int64_t; +// S390X:typedef unsigned long long int uint64_t; // S390X:typedef int64_t int_least64_t; // S390X:typedef uint64_t uint_least64_t; // S390X:typedef int64_t int_fast64_t; @@ -803,23 +803,23 @@ // S390X:UINT_FAST32_MAX_ 4294967295U // // S390X:INT64_MAX_ 9223372036854775807L -// S390X:INT64_MIN_ (-9223372036854775807L -1) +// S390X:INT64_MIN_ (-9223372036854775807LL -1) // S390X:UINT64_MAX_ 18446744073709551615UL -// S390X:INT_LEAST64_MIN_ (-9223372036854775807L -1) +// S390X:INT_LEAST64_MIN_ (-9223372036854775807LL -1) // S390X:INT_LEAST64_MAX_ 9223372036854775807L // S390X:UINT_LEAST64_MAX_ 18446744073709551615UL -// S390X:INT_FAST64_MIN_ (-9223372036854775807L -1) +// S390X:INT_FAST64_MIN_ (-9223372036854775807LL -1) // S390X:INT_FAST64_MAX_ 9223372036854775807L // S390X:UINT_FAST64_MAX_ 18446744073709551615UL // -// S390X:INTPTR_MIN_ (-9223372036854775807L -1) +// S390X:INTPTR_MIN_ (-9223372036854775807LL -1) // S390X:INTPTR_MAX_ 9223372036854775807L // S390X:UINTPTR_MAX_ 18446744073709551615UL -// S390X:PTRDIFF_MIN_ (-9223372036854775807L -1) +// S390X:PTRDIFF_MIN_ (-9223372036854775807LL -1) // S390X:PTRDIFF_MAX_ 9223372036854775807L // S390X:SIZE_MAX_ 18446744073709551615UL // -// S390X:INTMAX_MIN_ (-9223372036854775807L -1) +// S390X:INTMAX_MIN_ (-9223372036854775807LL -1) // S390X:INTMAX_MAX_ 9223372036854775807L // S390X:UINTMAX_MAX_ 18446744073709551615UL // |