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
Thanks, David
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();
if (wfoo.chars[0] != 16909060) __builtin_abort();