From 424e60d770813b55d99f29845e289c0b08d5f4b0 Mon Sep 17 00:00:00 2001 From: Saleem Abdulrasool Date: Sun, 4 May 2014 01:56:04 +0000 Subject: [PATCH] Target: fix wchar_t definition for Windows on ARM Windows on ARM uses AAPCS, but has some deviations. wchar_t remains an unsigned short on WoA, which does not conform to AAPCS. Ensure that wchar_t is defined accordingly. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@207929 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Basic/Targets.cpp | 11 +++++++++-- test/Preprocessor/woa-wchar_t.c | 5 +++++ 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 test/Preprocessor/woa-wchar_t.c diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 5effe027e2..4bcdb37341 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -3784,11 +3784,18 @@ class ARMTargetInfo : public TargetInfo { else SizeType = UnsignedInt; - if (T.getOS() == llvm::Triple::NetBSD) { + switch (T.getOS()) { + case llvm::Triple::NetBSD: WCharType = SignedInt; - } else { + break; + case llvm::Triple::Win32: + WCharType = UnsignedShort; + break; + case llvm::Triple::Linux: + default: // AAPCS 7.1.1, ARM-Linux ABI 2.4: type of wchar_t is unsigned int. WCharType = UnsignedInt; + break; } UseBitFieldTypeAlignment = true; diff --git a/test/Preprocessor/woa-wchar_t.c b/test/Preprocessor/woa-wchar_t.c new file mode 100644 index 0000000000..eb9a862853 --- /dev/null +++ b/test/Preprocessor/woa-wchar_t.c @@ -0,0 +1,5 @@ +// RUN: %clang_cc1 -dM -triple armv7-windows -E %s | FileCheck %s +// RUN: %clang_cc1 -dM -fno-signed-char -triple armv7-windows -E %s | FileCheck %s + +// CHECK: #define __WCHAR_TYPE__ unsigned short + -- 2.40.0