This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] g++.dg/cpp1y/pr58708.C wchar_t size
- From: David Edelsohn <dje dot gcc at gmail dot com>
- To: Jonathan Wakely <jwakely dot gcc at gmail dot com>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Tue, 17 Nov 2015 11:04:03 -0500
- Subject: [PATCH] g++.dg/cpp1y/pr58708.C wchar_t size
- Authentication-results: sourceware.org; auth=none
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();