public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH v4 0/3] C++20 P0482R6 and C2X N2653: char8_t, mbrtoc8(), and c8rtomb()
@ 2022-06-30 12:52 Tom Honermann
  2022-06-30 12:52 ` [PATCH v4 1/3] gconv: Correct Big5-HKSCS conversion to preserve all state bits. [BZ #25744] Tom Honermann
                   ` (3 more replies)
  0 siblings, 4 replies; 26+ messages in thread
From: Tom Honermann @ 2022-06-30 12:52 UTC (permalink / raw)
  To: libc-alpha; +Cc: Tom Honermann

This series of patches provides the following:
- A fix for BZ #25744 [1].
- Implementations of the mbrtoc8 and c8rtomb functions adopted for
  C++20 via WG21 P0482R6 [2] and for C2X via WG14 N2653 [3].
- A char8_t typedef as adopted for C2X via WG14 N2653 [3].

The fix for BZ #25744 [1] is included in this patch series because the tests
for mbrtoc8 and c8rtomb depend on it for exercising the special case where a
pair of Unicode code points is converted to/from a single double byte sequence.
Such conversion cases exist for Big5-HKSCS. 

N2653 was adopted by WG14 for C2X and wording is present in the N2912 revision
of the C2X working draft [4].  This patch series enables the new declarations
in C2X mode and when _GNU_SOURCE is defined. 

This patch series addresses feedback provided in response to the prior
submission series starting at [5].  All feedback was addressed except as noted
below:
- I removed the previously proposed wcsmbs/test-char8-type.c test as redundant
  per feedback. I prototyped extending the c++-types.data test as suggested,
  but that would have introduced a C++20 dependency.  The test demonstrated that
  the char16_t and char32_t types were mapped to 'Ds' and 'Di' as expected, but
  char8_t got mapped to 'h' rather than 'Du'.  It might be worth extending this
  test in the future if/when C++20 support becomes a minimal requirement.
- I did not switch the iconvdata/tst-iconv-big5-hkscs-to-2ucs4.c test to use
  TEST_COMPARE in favor of the existing custom error handling; the current
  error messages are customized to provide a more detailed explanation of the
  error, so removing that seemed like an arguable regression.  My changes retain
  consistency with the existing code.  I think it is reasonable to switch to
  TEST_COMPARE, but I think that should be done separately from this change and
  separately motivated.
- I did not change the c8rtomb() and mbrtoc8() implementations to use thread
  local storage when PS is null; the implementations continue to use static
  storage consistent with c16rtomb(), mbrtoc16(), c32rtomb(), and mbrtoc32().
  I think it is reasonable to switch all of these functions to use thread
  local storage, but I think such a change should be done consistently across
  all of them and should be separately motivated.

Thank you to Joseph Myers, Carlos O'Donell, Adhemerval Zanella, and Florian
Weimer for prior reviews of this patch series.

Tested on Linux x86_64.

[1]: Bug 25744
     "mbrtowc with Big5-HKSCS returns 2 instead of 1 when consuming the
     second byte of certain double byte characters"
     https://sourceware.org/bugzilla/show_bug.cgi?id=25744

[2]: WG21 P0482R6
     "char8_t: A type for UTF-8 characters and strings (Revision 6)"
     https://wg21.link/p0482r6

[3]: WG14 N2653
     "char8_t: A type for UTF-8 characters and strings (Revision 1)"
     http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2653.htm

[4]: WG14 N2912
     "Programming languages — C working draft — June 8, 2022"
     https://www.open-std.org/jtc1/sc22/wg14/www/docs/n2912.pdf

[5]: libc-alpha mailing list
     "[PATCH 0/3]: C++20 P0482R6 and C2X N2653: support for char8_t, mbrtoc8(), and c8rtomb()."
     https://sourceware.org/pipermail/libc-alpha/2022-February/136723.html

^ permalink raw reply	[flat|nested] 26+ messages in thread

end of thread, other threads:[~2022-07-24  4:46 UTC | newest]

Thread overview: 26+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-30 12:52 [PATCH v4 0/3] C++20 P0482R6 and C2X N2653: char8_t, mbrtoc8(), and c8rtomb() Tom Honermann
2022-06-30 12:52 ` [PATCH v4 1/3] gconv: Correct Big5-HKSCS conversion to preserve all state bits. [BZ #25744] Tom Honermann
2022-07-04 18:16   ` Adhemerval Zanella
2022-06-30 12:52 ` [PATCH v4 2/3] stdlib: Implement mbrtoc8(), c8rtomb(), and the char8_t typedef Tom Honermann
2022-07-04 18:33   ` Adhemerval Zanella
2022-07-19 21:08     ` Joseph Myers
2022-07-20 12:04       ` Adhemerval Zanella Netto
2022-07-20 13:54         ` Florian Weimer
2022-07-20 14:31           ` Adhemerval Zanella Netto
2022-07-20 15:05             ` Florian Weimer
2022-07-20 16:53               ` Tom Honermann
2022-07-20 16:47       ` Tom Honermann
2022-07-21 19:22         ` Adhemerval Zanella Netto
2022-07-21 20:51           ` Tom Honermann
2022-07-21 20:56             ` Adhemerval Zanella Netto
2022-07-22  5:24               ` Tom Honermann
2022-07-22 11:21                 ` Adhemerval Zanella Netto
2022-07-22 14:15                   ` Adhemerval Zanella Netto
2022-07-22 17:00                     ` Tom Honermann
2022-07-22 17:01                       ` Adhemerval Zanella Netto
2022-07-24  4:46                 ` Tom Honermann
2022-06-30 12:52 ` [PATCH v4 3/3] stdlib: Tests for " Tom Honermann
2022-07-04 18:58   ` Adhemerval Zanella
2022-07-04 19:08 ` [PATCH v4 0/3] C++20 P0482R6 and C2X N2653: char8_t, mbrtoc8(), and c8rtomb() Adhemerval Zanella
2022-07-06  3:27   ` Tom Honermann
2022-07-06 12:23     ` Adhemerval Zanella

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).