Re: [PATCH] ctype: Fix bitfield types on 16-bit targets
"Andre Vieira (lists)" <[email protected]>
| Newsgroups | gmane.comp.lib.newlib |
|---|---|
| Message-ID | <[email protected]> |
On 27/07/18 17:17, Thomas Wolff wrote: > > Am 26.07.2018 um 22:35 schrieb Brian Inglis: >> On 2018-07-26 10:05, Andre Vieira (lists) wrote: >>> On 20/07/18 12:57, Corinna Vinschen wrote: >>>> On Jul 20 13:07, Sebastian Huber wrote: >>>>> This prevents errors like this: >>>>> newlib/libc/ctype/categories.c:6:3: error: width of 'first' exceeds >>>>> its type >>>>> unsigned int first: 24; >>>>> ^ >>>>> Signed-off-by: Sebastian Huber <[email protected]> >>>>> --- >>>>> newlib/libc/ctype/categories.c | 5 +++-- >>>>> newlib/libc/ctype/towctrans_l.c | 9 +++++---- >>>>> 2 files changed, 8 insertions(+), 6 deletions(-) >>>> ACK. Please push. >>> Our aarch64 and arm bare-metal tests are showing failures with gcc's >>> libstdc++ 22_locale/ctype/to/wchar_t/1.cc after this patch. >>> src/gcc/libstdc++-v3/testsuite/22_locale/ctype/to/wchar_t/1.cc:66: void >>> test01(): Assertion 'c100 == c00' failed. >>> I haven't looked further into, just finished bisecting the issue. >>> Any idea what might be going wrong? >> Besides uninformative messages, small s is not being uppercased to >> capital S; >> https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=libstdc%2B%2B-v3/testsuite/22_locale/ctype/to/wchar_t/1.cc: >> >> >> ... >> typedef wchar_t char_type; >> class gnu_ctype: public std::ctype<char_type> { }; >> >> void test01() >> { >> ... >> const char_type c00 = L'S'; >> const char_type c10 = L's'; >> >> gnu_ctype gctype; >> char_type c100; >> ... >> // char_type toupper(char_type c) const >> c100 = gctype.toupper(c10); >> VERIFY( c100 == c00 ); >> ... >> >> which if not overridden by a non-default locale elsewhere may end up at: >> >> https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=libstdc%2B%2B-v3/config/os/newlib/ctype_configure_char.cc#l69 >> >> >> char >> ctype<char>::do_toupper(char __c) const >> { >> int __x = __c; >> return (this->is(ctype_base::lower, __c) ? (__x - 'a' + 'A') : __x); >> } >> >> which depends on the lower case test working correctly, which depends >> on the >> locale table initialization, wherever that's done. > Whatever gctype.toupper may be mapped to, the following gives me the > correct output: > printf ("%X %X\n", toupper('s'), towupper('s')); > Sebastian's new patch series https://sourceware.org/ml/newlib/2018/msg00570.html fixes this issue on Arm. Cheers, Andre