Message ID | CAGWvnym6qLBn7=kpHdwnCNSDPSX5Jk4=wjvtH822hPey_P9Hbg@mail.gmail.com |
---|---|
State | New |
Headers | show |
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.
Index: pr58708.C =================================================================== --- pr58708.C (revision 230463) +++ pr58708.C (working copy) @@ -1,5 +1,7 @@ // { dg-do run { target c++14 } } +#include <wchar.h> + template<typename, typename> struct is_same { @@ -43,7 +45,11 @@ if (foo.chars[1] != 98) __builtin_abort(); if (foo.chars[2] != 99) __builtin_abort(); - auto wfoo = L"\x01020304\x05060708"_foo; +#if WCHAR_MAX == 65535 + 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();