AAPCS compliance - 32-bit wchar_t should be unsigned for both aapcs and aapcs-linux.

Original behaviour of defining wchar_t as signed int has been kept for apcs-gnu as I don't have any spec for this to validate against.

llvm-svn: 145102
This commit is contained in:
James Molloy 2011-11-23 13:35:08 +00:00
parent 0b3e996485
commit c445be4b4b
3 changed files with 9 additions and 4 deletions

View File

@ -2404,6 +2404,8 @@ public:
{
SizeType = UnsignedInt;
PtrDiffType = SignedInt;
// AAPCS 7.1.1, ARM-Linux ABI 2.4: type of wchar_t is unsigned int.
WCharType = UnsignedInt;
// {} in inline assembly are neon specifiers, not assembly variant
// specifiers.
@ -2442,6 +2444,9 @@ public:
DoubleAlign = LongLongAlign = LongDoubleAlign = 32;
SizeType = UnsignedLong;
// Revert to using SignedInt on apcs-gnu to comply with existing behaviour.
WCharType = SignedInt;
// Do not respect the alignment of bit-field types when laying out
// structures. This corresponds to PCC_BITFIELD_TYPE_MATTERS in gcc.
UseBitFieldTypeAlignment = false;

View File

@ -212,8 +212,8 @@
// ARM:#define __THUMB_INTERWORK__ 1
// ARM:#define __UINTMAX_TYPE__ long long unsigned int
// ARM:#define __USER_LABEL_PREFIX__ _
// ARM:#define __WCHAR_MAX__ 2147483647
// ARM:#define __WCHAR_TYPE__ int
// ARM:#define __WCHAR_MAX__ 4294967295U
// ARM:#define __WCHAR_TYPE__ unsigned int
// ARM:#define __WCHAR_WIDTH__ 32
// ARM:#define __WINT_TYPE__ int
// ARM:#define __WINT_WIDTH__ 32

View File

@ -90,8 +90,8 @@
// ARM:WINT_MIN_ (-2147483647 -1)
// ARM:WINT_MAX_ 2147483647
//
// ARM:WCHAR_MAX_ 2147483647
// ARM:WCHAR_MIN_ (-2147483647 -1)
// ARM:WCHAR_MAX_ 4294967295U
// ARM:WCHAR_MIN_ 0U
//
// ARM:INT8_C_(0) 0
// ARM:UINT8_C_(0) 0U