diff mbox

g++.dg/cpp1y/pr58708.C wchar_t size

Message ID CAGWvny=isqxyzCn+q1VoBGRA8WyqN9Ou_ErFq=d3VbWXB51LwA@mail.gmail.com
State New
Headers show

Commit Message

David Edelsohn Nov. 17, 2015, 4:50 p.m. UTC
On Tue, Nov 17, 2015 at 11:22 AM, Jonathan Wakely <jwakely.gcc@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


   if (wfoo.chars[0] != 16909060) __builtin_abort();

Comments

Mike Stump Nov. 17, 2015, 11:39 p.m. UTC | #1
On Nov 17, 2015, at 8:50 AM, David Edelsohn <dje.gcc@gmail.com> wrote:
> 
> Thanks for the pointer.  How about the following?

Ok.

sizeof (*wfoo) or sizeof (wchar_t) or some such might be even more portable.

> 
> 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();
diff mbox

Patch

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();