On Tue, Nov 17, 2015 at 11:22 AM, Jonathan Wakely <jwakely....@gmail.com> wrote: > On 17 November 2015 at 16:04, David Edelsohn wrote: >> The testcase in the GCC testsuite assumes that wchar_t is 32 bits, >> which is not correct on AIX. 32 bit AIX maintains 16 bit wchar_t for >> backward compatibility (64 bit AIX uses 32 bit wchar_t). >> >> What is the preferred method to make the testcase safe for smaller wchar_t? >> >> The following patch works for me. I wasn't sure what header file and >> what macro test would be considered portable. I could include >> stdint.h and compare >> >> WCHAR_MAX == UINT16_MAX >> >> or >> >> WCHAR_MAX < UINT32_MAX > > __SIZEOF_WCHAR_T__ is always pre-defined by the compiler, so that > could be used.
Thanks for the pointer. How about the following? Thanks, David Index: pr58708.C =================================================================== --- pr58708.C (revision 230463) +++ pr58708.C (working copy) @@ -43,7 +43,11 @@ if (foo.chars[1] != 98) __builtin_abort(); if (foo.chars[2] != 99) __builtin_abort(); - auto wfoo = L"\x01020304\x05060708"_foo; +#if __SIZEOF_WCHAR_T__ == 2 + auto wfoo = L"\x0102\x0304"_foo; +#else + auto wfoo = L"\x01020304\x05060708"_foo; +#endif if (is_same<decltype(wfoo)::char_type, wchar_t>::value != true) __builtin_abort(); if (sizeof(wfoo.chars)/sizeof(wchar_t) != 2) __builtin_abort(); if (wfoo.chars[0] != 16909060) __builtin_abort();