summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSaleem Abdulrasool <compnerd@compnerd.org>2014-05-04 01:56:04 +0000
committerSaleem Abdulrasool <compnerd@compnerd.org>2014-05-04 01:56:04 +0000
commit6323a2d63c704aa26e6e10b48cbc6d55325a496a (patch)
tree6a7c0364f0b8b5d2173a3cb552256493b2087378
parent3c82b499a01ab4c3c1d1db0e821b39d8524c91ae (diff)
downloadbcm5719-llvm-6323a2d63c704aa26e6e10b48cbc6d55325a496a.tar.gz
bcm5719-llvm-6323a2d63c704aa26e6e10b48cbc6d55325a496a.zip
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. llvm-svn: 207929
-rw-r--r--clang/lib/Basic/Targets.cpp11
-rw-r--r--clang/test/Preprocessor/woa-wchar_t.c5
2 files changed, 14 insertions, 2 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp
index 5effe027e24..4bcdb373413 100644
--- a/clang/lib/Basic/Targets.cpp
+++ b/clang/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/clang/test/Preprocessor/woa-wchar_t.c b/clang/test/Preprocessor/woa-wchar_t.c
new file mode 100644
index 00000000000..eb9a8628537
--- /dev/null
+++ b/clang/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
+
OpenPOWER on IntegriCloud