diff mbox

[libstdc++,Testsuite] isctype test fails for newlib.

Message ID 54CF9C84.4020706@arm.com
State New
Headers show

Commit Message

Matthew Wahab Feb. 2, 2015, 3:49 p.m. UTC
Hello,

With target arm-none-eabi, the libstdc++ tests 
28_regex/traits/char/isctype.cc and 28_regex/traits/wchar/isctype.cc fail at
--
VERIFY(!t.isctype('\n', t.lookup_classname(range(blank))));
--
This is because libstdc++ puts '\n' in the 'space' character class, 
rather than 'blank' when building on newlib. This problem was known when 
suport for the blank character class was added to libstdc++ (see
https://gcc.gnu.org/ml/gcc-patches/2014-10/msg01902.html) so this 
failure is not unexpected.

Changes to newlib that would have allowed the problem to be fixed were 
made (https://sourceware.org/ml/newlib/2009/msg00342.html) but then 
reverted (https://sourceware.org/ml/newlib/2009/msg00438.html).

This patch modifies the test to add a special case for the behaviour 
with newlib.

Tested by running check-target-libstdc++-v3 - 
libstdc++-dg/conformance.exp, with the modified tests, for arm-none-eabi 
and aarch64-none-linux-gnu. No new failures and the modified tests now 
pass on arm-none-eabi.

Ok for trunk?
Matthew

libstdc++-v3/testsuite/
2015-02-02  Matthew Wahab  <matthew.wahab@arm.com>

	* 28_regex/traits/char/isctype.cc (test01): Add newlib special
	case for '\n'.
	* 28_regex/traits/wchar_t/isctype.cc (test01): Likewise.

Comments

Paolo Carlini Feb. 2, 2015, 4:17 p.m. UTC | #1
Hi,

On 02/02/2015 04:49 PM, Matthew Wahab wrote:
> Hello,
>
> With target arm-none-eabi, the libstdc++ tests 
> 28_regex/traits/char/isctype.cc and 28_regex/traits/wchar/isctype.cc 
> fail at
> -- 
> VERIFY(!t.isctype('\n', t.lookup_classname(range(blank))));
> -- 
> This is because libstdc++ puts '\n' in the 'space' character class, 
> rather than 'blank' when building on newlib. This problem was known 
> when suport for the blank character class was added to libstdc++ (see
> https://gcc.gnu.org/ml/gcc-patches/2014-10/msg01902.html) so this 
> failure is not unexpected.
>
> Changes to newlib that would have allowed the problem to be fixed were 
> made (https://sourceware.org/ml/newlib/2009/msg00342.html) but then 
> reverted (https://sourceware.org/ml/newlib/2009/msg00438.html).
>
> This patch modifies the test to add a special case for the behaviour 
> with newlib.
>
> Tested by running check-target-libstdc++-v3 - 
> libstdc++-dg/conformance.exp, with the modified tests, for 
> arm-none-eabi and aarch64-none-linux-gnu. No new failures and the 
> modified tests now pass on arm-none-eabi.
>
> Ok for trunk?
I guess the patch is Ok for trunk, but please also add in the comment a 
link to this message of yours, that is 
https://gcc.gnu.org/ml/gcc-patches/2015-02/msg00059.html.

Thanks,
Paolo.

PS: please remember to always CC libstdc++-v3 patches to 
libstdc++@gcc.gnu.org.
Jonathan Wakely Feb. 2, 2015, 4:33 p.m. UTC | #2
On 2 February 2015 at 16:17, Paolo Carlini <paolo.carlini@oracle.com> wrote:
> Hi,
>
> On 02/02/2015 04:49 PM, Matthew Wahab wrote:
>>
>> Hello,
>>
>> With target arm-none-eabi, the libstdc++ tests
>> 28_regex/traits/char/isctype.cc and 28_regex/traits/wchar/isctype.cc fail at
>> --
>> VERIFY(!t.isctype('\n', t.lookup_classname(range(blank))));
>> --
>> This is because libstdc++ puts '\n' in the 'space' character class, rather
>> than 'blank' when building on newlib. This problem was known when suport for
>> the blank character class was added to libstdc++ (see
>> https://gcc.gnu.org/ml/gcc-patches/2014-10/msg01902.html) so this failure
>> is not unexpected.
>>
>> Changes to newlib that would have allowed the problem to be fixed were
>> made (https://sourceware.org/ml/newlib/2009/msg00342.html) but then reverted
>> (https://sourceware.org/ml/newlib/2009/msg00438.html).
>>
>> This patch modifies the test to add a special case for the behaviour with
>> newlib.
>>
>> Tested by running check-target-libstdc++-v3 -
>> libstdc++-dg/conformance.exp, with the modified tests, for arm-none-eabi and
>> aarch64-none-linux-gnu. No new failures and the modified tests now pass on
>> arm-none-eabi.
>>
>> Ok for trunk?

This is https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64467 so please
note that in the ChangeLog.

> I guess the patch is Ok for trunk, but please also add in the comment a link
> to this message of yours, that is
> https://gcc.gnu.org/ml/gcc-patches/2015-02/msg00059.html.
>
> Thanks,
> Paolo.
>
> PS: please remember to always CC libstdc++-v3 patches to
> libstdc++@gcc.gnu.org.

Yes, not everyone subscribes to gcc-patches so please always send
libstdc++ patches to the libstdc++ list, as documented at
https://gcc.gnu.org/lists.html and in the libstdc++ manual.
Jonathan Wakely Feb. 2, 2015, 6:14 p.m. UTC | #3
On 2 February 2015 at 18:03, Matthew Wahab wrote:
> Updated patch attached and changelog below.

Looks good, OK for trunk - thanks for fixing it.
diff mbox

Patch

diff --git a/libstdc++-v3/testsuite/28_regex/traits/char/isctype.cc b/libstdc++-v3/testsuite/28_regex/traits/char/isctype.cc
index a7b1396..df0dac8 100644
--- a/libstdc++-v3/testsuite/28_regex/traits/char/isctype.cc
+++ b/libstdc++-v3/testsuite/28_regex/traits/char/isctype.cc
@@ -53,7 +53,12 @@  test01()
   VERIFY(!t.isctype('_', t.lookup_classname(range(digit))));
   VERIFY( t.isctype(' ', t.lookup_classname(range(blank))));
   VERIFY( t.isctype('\t', t.lookup_classname(range(blank))));
+#if defined (__NEWLIB__)
+  /* newlib includes '\n' in class 'blank'.  */
+  VERIFY( t.isctype('\n', t.lookup_classname(range(blank))));
+#else
   VERIFY(!t.isctype('\n', t.lookup_classname(range(blank))));
+#endif
   VERIFY( t.isctype('t', t.lookup_classname(range(upper), true)));
   VERIFY( t.isctype('T', t.lookup_classname(range(lower), true)));
 #undef range
diff --git a/libstdc++-v3/testsuite/28_regex/traits/wchar_t/isctype.cc b/libstdc++-v3/testsuite/28_regex/traits/wchar_t/isctype.cc
index e450f6d..b6088bd 100644
--- a/libstdc++-v3/testsuite/28_regex/traits/wchar_t/isctype.cc
+++ b/libstdc++-v3/testsuite/28_regex/traits/wchar_t/isctype.cc
@@ -50,7 +50,12 @@  test01()
   VERIFY(!t.isctype(L'_', t.lookup_classname(range(digit))));
   VERIFY( t.isctype(L' ', t.lookup_classname(range(blank))));
   VERIFY( t.isctype(L'\t', t.lookup_classname(range(blank))));
+#if defined (__NEWLIB__)
+  /* newlib includes '\n' in class 'blank'.  */
+  VERIFY( t.isctype(L'\n', t.lookup_classname(range(blank))));
+#else
   VERIFY(!t.isctype(L'\n', t.lookup_classname(range(blank))));
+#endif
   VERIFY( t.isctype(L't', t.lookup_classname(range(upper), true)));
   VERIFY( t.isctype(L'T', t.lookup_classname(range(lower), true)));
 #undef range