Re: [PATCH] libcpp, c-family: Implement C++29 P3733R1 - More named universal character escapes

Jason Merrill <[email protected]> Wed, 5 Aug 2026 19:19:13 -0400
Newsgroups gmane.comp.gcc.patches
Message-ID <[email protected]>
On 6/11/26 10:01 AM, Jakub Jelinek wrote:
> Hi!
> 
> The following patch attempts to implement
> C++29 P3733R1 - More named universal character escapes
> paper as a DR.
> I've left out the regenerated file diff, because it is over the mailing
> list limits even after xz -9e.
> 
> Ok for trunk if this is voted into C++29 as DR?

OK.
> 2026-06-11  Jakub Jelinek  <[email protected]>
> 
> gcc/c-family/
> 	* c-cppbuiltin.cc (c_cpp_builtins): Change
> 	__cpp_named_character_escapes value from 202207L to 202606L.
> gcc/testsuite/
> 	* c-c++-common/cpp/named-universal-char-escape-3.c: Remove two
> 	expected errors.
> 	* c-c++-common/cpp/named-universal-char-escape-8.c: New test.
> 	* g++.dg/DRs/dr2581-2.C: Adjust __cpp_named_character_escapes value.
> 	* g++.dg/cpp23/feat-cxx2b.C (__cpp_named_character_escapes): Expect
> 	202606L rather than 202207L.
> 	* g++.dg/cpp26/feat-cxx26.C (__cpp_named_character_escapes): Likewise.
> libcpp/
> 	* makeuname2c.cc: Implement C++29 P3733R1 - More named universal
> 	character escapes as a DR.
> 	(read_table): Don't ignore figment and abbreviation aliases.
> 	* uname2c.h: Regenerate.
> 
> --- gcc/c-family/c-cppbuiltin.cc.jj	2026-06-08 21:35:37.748685829 +0200
> +++ gcc/c-family/c-cppbuiltin.cc	2026-06-11 14:50:19.582956220 +0200
> @@ -1099,7 +1099,7 @@ c_cpp_builtins (cpp_reader *pfile)
>   	    cpp_define (pfile, "__cpp_constexpr=202211L");
>   	  cpp_define (pfile, "__cpp_deduction_guides=202207L");
>   	  cpp_define (pfile, "__cpp_multidimensional_subscript=202211L");
> -	  cpp_define (pfile, "__cpp_named_character_escapes=202207L");
> +	  cpp_define (pfile, "__cpp_named_character_escapes=202606L");
>   	  cpp_define (pfile, "__cpp_static_call_operator=202207L");
>   	  cpp_define (pfile, "__cpp_implicit_move=202207L");
>   	  cpp_define (pfile, "__cpp_explicit_this_parameter=202110L");
> --- gcc/testsuite/c-c++-common/cpp/named-universal-char-escape-3.c.jj	2026-03-27 10:17:15.174313768 +0100
> +++ gcc/testsuite/c-c++-common/cpp/named-universal-char-escape-3.c	2026-06-11 15:18:11.104788931 +0200
> @@ -14,5 +14,5 @@ const char32_t *c = U"\N{ I've just made
>   const char32_t *d = U"\N{_________    _______}";	/* { dg-error "is not a valid universal character" } */
>   const char32_t *e = U"\N{O.X}";				/* { dg-error "'\\\\N\\{' not terminated with '\\}' after" } */
>   const char32_t *f = U"\N{.}";				/* { dg-error "'\\\\N\\{' not terminated with '\\}' after" } */
> -const char32_t *g = U"\N{BOM}";				/* { dg-error "is not a valid universal character" } */
> -const char32_t *h = U"\N{ZWNBSP}";			/* { dg-error "is not a valid universal character" } */
> +const char32_t *g = U"\N{BOM}";
> +const char32_t *h = U"\N{ZWNBSP}";
> --- gcc/testsuite/c-c++-common/cpp/named-universal-char-escape-8.c.jj	2026-06-11 14:54:07.615925317 +0200
> +++ gcc/testsuite/c-c++-common/cpp/named-universal-char-escape-8.c	2026-06-11 15:26:20.022365209 +0200
> @@ -0,0 +1,388 @@
> +/* P3733R1 - More named universal character escapes */
> +/* { dg-do run } */
> +/* { dg-require-effective-target wchar } */
> +/* { dg-options "-std=gnu99 -Wno-c++-compat" { target c } } */
> +/* { dg-options "-std=c++23" { target c++ } } */
> +
> +#ifndef __cplusplus
> +#include <wchar.h>
> +typedef __CHAR16_TYPE__ char16_t;
> +typedef __CHAR32_TYPE__ char32_t;
> +#endif
> +
> +#ifdef __cplusplus
> +#if U'\u0080' != U'\N{PADDING CHARACTER}' \
> +    || U'\u0081' != U'\N{HIGH OCTET PRESET}' \
> +    || U'\u0099' != U'\N{SINGLE GRAPHIC CHARACTER INTRODUCER}' \
> +    || U'\u0000' != U'\N{NUL}' \
> +    || U'\u0001' != U'\N{SOH}' \
> +    || U'\u0002' != U'\N{STX}' \
> +    || U'\u0003' != U'\N{ETX}' \
> +    || U'\u0004' != U'\N{EOT}' \
> +    || U'\u0005' != U'\N{ENQ}' \
> +    || U'\u0006' != U'\N{ACK}' \
> +    || U'\u0007' != U'\N{BEL}' \
> +    || U'\u0008' != U'\N{BS}' \
> +    || U'\u0009' != U'\N{HT}' \
> +    || U'\u0009' != U'\N{TAB}' \
> +    || U'\u000A' != U'\N{LF}' \
> +    || U'\u000A' != U'\N{NL}' \
> +    || U'\u000A' != U'\N{EOL}' \
> +    || U'\u000B' != U'\N{VT}' \
> +    || U'\u000C' != U'\N{FF}' \
> +    || U'\u000D' != U'\N{CR}' \
> +    || U'\u000E' != U'\N{SO}' \
> +    || U'\u000F' != U'\N{SI}' \
> +    || U'\u0010' != U'\N{DLE}' \
> +    || U'\u0011' != U'\N{DC1}' \
> +    || U'\u0012' != U'\N{DC2}' \
> +    || U'\u0013' != U'\N{DC3}' \
> +    || U'\u0014' != U'\N{DC4}' \
> +    || U'\u0015' != U'\N{NAK}' \
> +    || U'\u0016' != U'\N{SYN}' \
> +    || U'\u0017' != U'\N{ETB}' \
> +    || U'\u0018' != U'\N{CAN}' \
> +    || U'\u0019' != U'\N{EOM}' \
> +    || U'\u0019' != U'\N{EM}' \
> +    || U'\u001A' != U'\N{SUB}' \
> +    || U'\u001B' != U'\N{ESC}' \
> +    || U'\u001C' != U'\N{FS}' \
> +    || U'\u001D' != U'\N{GS}' \
> +    || U'\u001E' != U'\N{RS}' \
> +    || U'\u001F' != U'\N{US}' \
> +    || U'\u0020' != U'\N{SP}' \
> +    || U'\u007F' != U'\N{DEL}' \
> +    || U'\u0080' != U'\N{PAD}' \
> +    || U'\u0081' != U'\N{HOP}' \
> +    || U'\u0082' != U'\N{BPH}' \
> +    || U'\u0083' != U'\N{NBH}' \
> +    || U'\u0084' != U'\N{IND}' \
> +    || U'\u0085' != U'\N{NEL}' \
> +    || U'\u0086' != U'\N{SSA}' \
> +    || U'\u0087' != U'\N{ESA}' \
> +    || U'\u0088' != U'\N{HTS}' \
> +    || U'\u0089' != U'\N{HTJ}' \
> +    || U'\u008A' != U'\N{VTS}' \
> +    || U'\u008B' != U'\N{PLD}' \
> +    || U'\u008C' != U'\N{PLU}' \
> +    || U'\u008D' != U'\N{RI}' \
> +    || U'\u008E' != U'\N{SS2}' \
> +    || U'\u008F' != U'\N{SS3}' \
> +    || U'\u0090' != U'\N{DCS}' \
> +    || U'\u0091' != U'\N{PU1}' \
> +    || U'\u0092' != U'\N{PU2}' \
> +    || U'\u0093' != U'\N{STS}' \
> +    || U'\u0094' != U'\N{CCH}' \
> +    || U'\u0095' != U'\N{MW}' \
> +    || U'\u0096' != U'\N{SPA}' \
> +    || U'\u0097' != U'\N{EPA}' \
> +    || U'\u0098' != U'\N{SOS}' \
> +    || U'\u0099' != U'\N{SGC}' \
> +    || U'\u009A' != U'\N{SCI}' \
> +    || U'\u009B' != U'\N{CSI}' \
> +    || U'\u009C' != U'\N{ST}' \
> +    || U'\u009D' != U'\N{OSC}' \
> +    || U'\u009E' != U'\N{PM}' \
> +    || U'\u009F' != U'\N{APC}' \
> +    || U'\u00A0' != U'\N{NBSP}' \
> +    || U'\u00AD' != U'\N{SHY}' \
> +    || U'\u034F' != U'\N{CGJ}' \
> +    || U'\u061C' != U'\N{ALM}' \
> +    || U'\u180B' != U'\N{FVS1}' \
> +    || U'\u180C' != U'\N{FVS2}' \
> +    || U'\u180D' != U'\N{FVS3}' \
> +    || U'\u180E' != U'\N{MVS}' \
> +    || U'\u180F' != U'\N{FVS4}' \
> +    || U'\u200B' != U'\N{ZWSP}' \
> +    || U'\u200C' != U'\N{ZWNJ}' \
> +    || U'\u200D' != U'\N{ZWJ}' \
> +    || U'\u200E' != U'\N{LRM}' \
> +    || U'\u200F' != U'\N{RLM}' \
> +    || U'\u202A' != U'\N{LRE}' \
> +    || U'\u202B' != U'\N{RLE}' \
> +    || U'\u202C' != U'\N{PDF}' \
> +    || U'\u202D' != U'\N{LRO}' \
> +    || U'\u202E' != U'\N{RLO}' \
> +    || U'\u202F' != U'\N{NNBSP}' \
> +    || U'\u205F' != U'\N{MMSP}' \
> +    || U'\u2060' != U'\N{WJ}' \
> +    || U'\u2066' != U'\N{LRI}' \
> +    || U'\u2067' != U'\N{RLI}' \
> +    || U'\u2068' != U'\N{FSI}' \
> +    || U'\u2069' != U'\N{PDI}' \
> +    || U'\uFE00' != U'\N{VS1}' \
> +    || U'\uFE01' != U'\N{VS2}' \
> +    || U'\uFE02' != U'\N{VS3}' \
> +    || U'\uFE03' != U'\N{VS4}' \
> +    || U'\uFE04' != U'\N{VS5}' \
> +    || U'\uFE05' != U'\N{VS6}' \
> +    || U'\uFE06' != U'\N{VS7}' \
> +    || U'\uFE07' != U'\N{VS8}' \
> +    || U'\uFE08' != U'\N{VS9}' \
> +    || U'\uFE09' != U'\N{VS10}' \
> +    || U'\uFE0A' != U'\N{VS11}' \
> +    || U'\uFE0B' != U'\N{VS12}' \
> +    || U'\uFE0C' != U'\N{VS13}' \
> +    || U'\uFE0D' != U'\N{VS14}' \
> +    || U'\uFE0E' != U'\N{VS15}' \
> +    || U'\uFE0F' != U'\N{VS16}' \
> +    || U'\uFEFF' != U'\N{BOM}' \
> +    || U'\uFEFF' != U'\N{ZWNBSP}' \
> +    || U'\U0002FA1D' != U'\N{CJK COMPATIBILITY IDEOGRAPH-2FA1D}'
> +    || U'\U000E0100' != U'\N{VS17}' \
> +    || U'\U000E0101' != U'\N{VS18}' \
> +    || U'\U000E0102' != U'\N{VS19}' \
> +    || U'\U000E0103' != U'\N{VS20}' \
> +    || U'\U000E0104' != U'\N{VS21}' \
> +    || U'\U000E0105' != U'\N{VS22}' \
> +    || U'\U000E0106' != U'\N{VS23}' \
> +    || U'\U000E0107' != U'\N{VS24}' \
> +    || U'\U000E0108' != U'\N{VS25}' \
> +    || U'\U000E0109' != U'\N{VS26}' \
> +    || U'\U000E010A' != U'\N{VS27}' \
> +    || U'\U000E010B' != U'\N{VS28}' \
> +    || U'\U000E010C' != U'\N{VS29}' \
> +    || U'\U000E010D' != U'\N{VS30}' \
> +    || U'\U000E010E' != U'\N{VS31}' \
> +    || U'\U000E010F' != U'\N{VS32}' \
> +    || U'\U000E0110' != U'\N{VS33}' \
> +    || U'\U000E0111' != U'\N{VS34}' \
> +    || U'\U000E0112' != U'\N{VS35}' \
> +    || U'\U000E0113' != U'\N{VS36}' \
> +    || U'\U000E0114' != U'\N{VS37}' \
> +    || U'\U000E0115' != U'\N{VS38}' \
> +    || U'\U000E0116' != U'\N{VS39}' \
> +    || U'\U000E0117' != U'\N{VS40}' \
> +    || U'\U000E0118' != U'\N{VS41}' \
> +    || U'\U000E0119' != U'\N{VS42}' \
> +    || U'\U000E011A' != U'\N{VS43}' \
> +    || U'\U000E011B' != U'\N{VS44}' \
> +    || U'\U000E011C' != U'\N{VS45}' \
> +    || U'\U000E011D' != U'\N{VS46}' \
> +    || U'\U000E011E' != U'\N{VS47}' \
> +    || U'\U000E011F' != U'\N{VS48}' \
> +    || U'\U000E0120' != U'\N{VS49}' \
> +    || U'\U000E0121' != U'\N{VS50}' \
> +    || U'\U000E0122' != U'\N{VS51}' \
> +    || U'\U000E0123' != U'\N{VS52}' \
> +    || U'\U000E0124' != U'\N{VS53}' \
> +    || U'\U000E0125' != U'\N{VS54}' \
> +    || U'\U000E0126' != U'\N{VS55}' \
> +    || U'\U000E0127' != U'\N{VS56}' \
> +    || U'\U000E0128' != U'\N{VS57}' \
> +    || U'\U000E0129' != U'\N{VS58}' \
> +    || U'\U000E012A' != U'\N{VS59}' \
> +    || U'\U000E012B' != U'\N{VS60}' \
> +    || U'\U000E012C' != U'\N{VS61}' \
> +    || U'\U000E012D' != U'\N{VS62}' \
> +    || U'\U000E012E' != U'\N{VS63}' \
> +    || U'\U000E012F' != U'\N{VS64}' \
> +    || U'\U000E0130' != U'\N{VS65}' \
> +    || U'\U000E0131' != U'\N{VS66}' \
> +    || U'\U000E0132' != U'\N{VS67}' \
> +    || U'\U000E0133' != U'\N{VS68}' \
> +    || U'\U000E0134' != U'\N{VS69}' \
> +    || U'\U000E0135' != U'\N{VS70}' \
> +    || U'\U000E0136' != U'\N{VS71}' \
> +    || U'\U000E0137' != U'\N{VS72}' \
> +    || U'\U000E0138' != U'\N{VS73}' \
> +    || U'\U000E0139' != U'\N{VS74}' \
> +    || U'\U000E013A' != U'\N{VS75}' \
> +    || U'\U000E013B' != U'\N{VS76}' \
> +    || U'\U000E013C' != U'\N{VS77}' \
> +    || U'\U000E013D' != U'\N{VS78}' \
> +    || U'\U000E013E' != U'\N{VS79}' \
> +    || U'\U000E013F' != U'\N{VS80}' \
> +    || U'\U000E0140' != U'\N{VS81}' \
> +    || U'\U000E0141' != U'\N{VS82}' \
> +    || U'\U000E0142' != U'\N{VS83}' \
> +    || U'\U000E0143' != U'\N{VS84}' \
> +    || U'\U000E0144' != U'\N{VS85}' \
> +    || U'\U000E0145' != U'\N{VS86}' \
> +    || U'\U000E0146' != U'\N{VS87}' \
> +    || U'\U000E0147' != U'\N{VS88}' \
> +    || U'\U000E0148' != U'\N{VS89}' \
> +    || U'\U000E0149' != U'\N{VS90}' \
> +    || U'\U000E014A' != U'\N{VS91}' \
> +    || U'\U000E014B' != U'\N{VS92}' \
> +    || U'\U000E014C' != U'\N{VS93}' \
> +    || U'\U000E014D' != U'\N{VS94}' \
> +    || U'\U000E014E' != U'\N{VS95}' \
> +    || U'\U000E014F' != U'\N{VS96}' \
> +    || U'\U000E0150' != U'\N{VS97}' \
> +    || U'\U000E0151' != U'\N{VS98}' \
> +    || U'\U000E0152' != U'\N{VS99}' \
> +    || U'\U000E0153' != U'\N{VS100}' \
> +    || U'\U000E0154' != U'\N{VS101}' \
> +    || U'\U000E0155' != U'\N{VS102}' \
> +    || U'\U000E0156' != U'\N{VS103}' \
> +    || U'\U000E0157' != U'\N{VS104}' \
> +    || U'\U000E0158' != U'\N{VS105}' \
> +    || U'\U000E0159' != U'\N{VS106}' \
> +    || U'\U000E015A' != U'\N{VS107}' \
> +    || U'\U000E015B' != U'\N{VS108}' \
> +    || U'\U000E015C' != U'\N{VS109}' \
> +    || U'\U000E015D' != U'\N{VS110}' \
> +    || U'\U000E015E' != U'\N{VS111}' \
> +    || U'\U000E015F' != U'\N{VS112}' \
> +    || U'\U000E0160' != U'\N{VS113}' \
> +    || U'\U000E0161' != U'\N{VS114}' \
> +    || U'\U000E0162' != U'\N{VS115}' \
> +    || U'\U000E0163' != U'\N{VS116}' \
> +    || U'\U000E0164' != U'\N{VS117}' \
> +    || U'\U000E0165' != U'\N{VS118}' \
> +    || U'\U000E0166' != U'\N{VS119}' \
> +    || U'\U000E0167' != U'\N{VS120}' \
> +    || U'\U000E0168' != U'\N{VS121}' \
> +    || U'\U000E0169' != U'\N{VS122}' \
> +    || U'\U000E016A' != U'\N{VS123}' \
> +    || U'\U000E016B' != U'\N{VS124}' \
> +    || U'\U000E016C' != U'\N{VS125}' \
> +    || U'\U000E016D' != U'\N{VS126}' \
> +    || U'\U000E016E' != U'\N{VS127}' \
> +    || U'\U000E016F' != U'\N{VS128}' \
> +    || U'\U000E0170' != U'\N{VS129}' \
> +    || U'\U000E0171' != U'\N{VS130}' \
> +    || U'\U000E0172' != U'\N{VS131}' \
> +    || U'\U000E0173' != U'\N{VS132}' \
> +    || U'\U000E0174' != U'\N{VS133}' \
> +    || U'\U000E0175' != U'\N{VS134}' \
> +    || U'\U000E0176' != U'\N{VS135}' \
> +    || U'\U000E0177' != U'\N{VS136}' \
> +    || U'\U000E0178' != U'\N{VS137}' \
> +    || U'\U000E0179' != U'\N{VS138}' \
> +    || U'\U000E017A' != U'\N{VS139}' \
> +    || U'\U000E017B' != U'\N{VS140}' \
> +    || U'\U000E017C' != U'\N{VS141}' \
> +    || U'\U000E017D' != U'\N{VS142}' \
> +    || U'\U000E017E' != U'\N{VS143}' \
> +    || U'\U000E017F' != U'\N{VS144}' \
> +    || U'\U000E0180' != U'\N{VS145}' \
> +    || U'\U000E0181' != U'\N{VS146}' \
> +    || U'\U000E0182' != U'\N{VS147}' \
> +    || U'\U000E0183' != U'\N{VS148}' \
> +    || U'\U000E0184' != U'\N{VS149}' \
> +    || U'\U000E0185' != U'\N{VS150}' \
> +    || U'\U000E0186' != U'\N{VS151}' \
> +    || U'\U000E0187' != U'\N{VS152}' \
> +    || U'\U000E0188' != U'\N{VS153}' \
> +    || U'\U000E0189' != U'\N{VS154}' \
> +    || U'\U000E018A' != U'\N{VS155}' \
> +    || U'\U000E018B' != U'\N{VS156}' \
> +    || U'\U000E018C' != U'\N{VS157}' \
> +    || U'\U000E018D' != U'\N{VS158}' \
> +    || U'\U000E018E' != U'\N{VS159}' \
> +    || U'\U000E018F' != U'\N{VS160}' \
> +    || U'\U000E0190' != U'\N{VS161}' \
> +    || U'\U000E0191' != U'\N{VS162}' \
> +    || U'\U000E0192' != U'\N{VS163}' \
> +    || U'\U000E0193' != U'\N{VS164}' \
> +    || U'\U000E0194' != U'\N{VS165}' \
> +    || U'\U000E0195' != U'\N{VS166}' \
> +    || U'\U000E0196' != U'\N{VS167}' \
> +    || U'\U000E0197' != U'\N{VS168}' \
> +    || U'\U000E0198' != U'\N{VS169}' \
> +    || U'\U000E0199' != U'\N{VS170}' \
> +    || U'\U000E019A' != U'\N{VS171}' \
> +    || U'\U000E019B' != U'\N{VS172}' \
> +    || U'\U000E019C' != U'\N{VS173}' \
> +    || U'\U000E019D' != U'\N{VS174}' \
> +    || U'\U000E019E' != U'\N{VS175}' \
> +    || U'\U000E019F' != U'\N{VS176}' \
> +    || U'\U000E01A0' != U'\N{VS177}' \
> +    || U'\U000E01A1' != U'\N{VS178}' \
> +    || U'\U000E01A2' != U'\N{VS179}' \
> +    || U'\U000E01A3' != U'\N{VS180}' \
> +    || U'\U000E01A4' != U'\N{VS181}' \
> +    || U'\U000E01A5' != U'\N{VS182}' \
> +    || U'\U000E01A6' != U'\N{VS183}' \
> +    || U'\U000E01A7' != U'\N{VS184}' \
> +    || U'\U000E01A8' != U'\N{VS185}' \
> +    || U'\U000E01A9' != U'\N{VS186}' \
> +    || U'\U000E01AA' != U'\N{VS187}' \
> +    || U'\U000E01AB' != U'\N{VS188}' \
> +    || U'\U000E01AC' != U'\N{VS189}' \
> +    || U'\U000E01AD' != U'\N{VS190}' \
> +    || U'\U000E01AE' != U'\N{VS191}' \
> +    || U'\U000E01AF' != U'\N{VS192}' \
> +    || U'\U000E01B0' != U'\N{VS193}' \
> +    || U'\U000E01B1' != U'\N{VS194}' \
> +    || U'\U000E01B2' != U'\N{VS195}' \
> +    || U'\U000E01B3' != U'\N{VS196}' \
> +    || U'\U000E01B4' != U'\N{VS197}' \
> +    || U'\U000E01B5' != U'\N{VS198}' \
> +    || U'\U000E01B6' != U'\N{VS199}' \
> +    || U'\U000E01B7' != U'\N{VS200}' \
> +    || U'\U000E01B8' != U'\N{VS201}' \
> +    || U'\U000E01B9' != U'\N{VS202}' \
> +    || U'\U000E01BA' != U'\N{VS203}' \
> +    || U'\U000E01BB' != U'\N{VS204}' \
> +    || U'\U000E01BC' != U'\N{VS205}' \
> +    || U'\U000E01BD' != U'\N{VS206}' \
> +    || U'\U000E01BE' != U'\N{VS207}' \
> +    || U'\U000E01BF' != U'\N{VS208}' \
> +    || U'\U000E01C0' != U'\N{VS209}' \
> +    || U'\U000E01C1' != U'\N{VS210}' \
> +    || U'\U000E01C2' != U'\N{VS211}' \
> +    || U'\U000E01C3' != U'\N{VS212}' \
> +    || U'\U000E01C4' != U'\N{VS213}' \
> +    || U'\U000E01C5' != U'\N{VS214}' \
> +    || U'\U000E01C6' != U'\N{VS215}' \
> +    || U'\U000E01C7' != U'\N{VS216}' \
> +    || U'\U000E01C8' != U'\N{VS217}' \
> +    || U'\U000E01C9' != U'\N{VS218}' \
> +    || U'\U000E01CA' != U'\N{VS219}' \
> +    || U'\U000E01CB' != U'\N{VS220}' \
> +    || U'\U000E01CC' != U'\N{VS221}' \
> +    || U'\U000E01CD' != U'\N{VS222}' \
> +    || U'\U000E01CE' != U'\N{VS223}' \
> +    || U'\U000E01CF' != U'\N{VS224}' \
> +    || U'\U000E01D0' != U'\N{VS225}' \
> +    || U'\U000E01D1' != U'\N{VS226}' \
> +    || U'\U000E01D2' != U'\N{VS227}' \
> +    || U'\U000E01D3' != U'\N{VS228}' \
> +    || U'\U000E01D4' != U'\N{VS229}' \
> +    || U'\U000E01D5' != U'\N{VS230}' \
> +    || U'\U000E01D6' != U'\N{VS231}' \
> +    || U'\U000E01D7' != U'\N{VS232}' \
> +    || U'\U000E01D8' != U'\N{VS233}' \
> +    || U'\U000E01D9' != U'\N{VS234}' \
> +    || U'\U000E01DA' != U'\N{VS235}' \
> +    || U'\U000E01DB' != U'\N{VS236}' \
> +    || U'\U000E01DC' != U'\N{VS237}' \
> +    || U'\U000E01DD' != U'\N{VS238}' \
> +    || U'\U000E01DE' != U'\N{VS239}' \
> +    || U'\U000E01DF' != U'\N{VS240}' \
> +    || U'\U000E01E0' != U'\N{VS241}' \
> +    || U'\U000E01E1' != U'\N{VS242}' \
> +    || U'\U000E01E2' != U'\N{VS243}' \
> +    || U'\U000E01E3' != U'\N{VS244}' \
> +    || U'\U000E01E4' != U'\N{VS245}' \
> +    || U'\U000E01E5' != U'\N{VS246}' \
> +    || U'\U000E01E6' != U'\N{VS247}' \
> +    || U'\U000E01E7' != U'\N{VS248}' \
> +    || U'\U000E01E8' != U'\N{VS249}' \
> +    || U'\U000E01E9' != U'\N{VS250}' \
> +    || U'\U000E01EA' != U'\N{VS251}' \
> +    || U'\U000E01EB' != U'\N{VS252}' \
> +    || U'\U000E01EC' != U'\N{VS253}' \
> +    || U'\U000E01ED' != U'\N{VS254}' \
> +    || U'\U000E01EE' != U'\N{VS255}' \
> +    || U'\U000E01EF' != U'\N{VS256}'
> +#error Bad
> +#endif
> +#endif
> +
> +const char32_t *a = U"\N{PADDING CHARACTER}\N{HIGH OCTET PRESET}\N{SINGLE GRAPHIC CHARACTER INTRODUCER}";
> +const char32_t *b = U"\N{BEL}\N{NL}\N{CGJ}\N{ZWNJ}\N{VS4}\N{ZWNBSP}\N{BOM}\N{VS46}\N{NUL}";
> +
> +int
> +main ()
> +{
> +  if (a[0] != U'\u0080' || a[1] != U'\u0081' || a[2] != U'\u0099' || a[3]
> +      || b[0] != U'\u0007' || b[1] != U'\u000A' || b[2] != U'\u034F' || b[3] != U'\u200C'
> +      || b[4] != U'\uFE03' || b[5] != U'\uFEFF' || b[6] != U'\uFEFF' || b[7] != U'\U000E011D'
> +      || b[8] || b[9])
> +    __builtin_abort ();
> +  return 0;
> +}
> --- gcc/testsuite/g++.dg/DRs/dr2581-2.C.jj	2026-05-22 10:15:30.255057573 +0200
> +++ gcc/testsuite/g++.dg/DRs/dr2581-2.C	2026-06-11 14:51:17.881181353 +0200
> @@ -73,7 +73,7 @@
>   #define __cpp_lambdas 200907L			// { dg-error "'__cpp_lambdas' redefined" "" { target c++20 } }
>   #define __cpp_modules 201907L			// { dg-error "'__cpp_modules' redefined" "" { target c++20 } }
>   #define __cpp_multidimensional_subscript 202211L // { dg-error "'__cpp_multidimensional_subscript' redefined" "" { target c++23 } }
> -#define __cpp_named_character_escapes 202207L	// { dg-error "'__cpp_named_character_escapes' redefined" "" { target c++23 } }
> +#define __cpp_named_character_escapes 202606L	// { dg-error "'__cpp_named_character_escapes' redefined" "" { target c++23 } }
>   #define __cpp_namespace_attributes 201411L	// { dg-error "'__cpp_namespace_attributes' redefined" "" { target c++20 } }
>   #define __cpp_noexcept_function_type 201510L	// { dg-error "'__cpp_noexcept_function_type' redefined" "" { target c++20 } }
>   #define __cpp_nontype_template_args 201911L	// { dg-error "'__cpp_nontype_template_args' redefined" "" { target c++17 } }
> --- gcc/testsuite/g++.dg/cpp23/feat-cxx2b.C.jj	2026-03-27 10:17:15.643306115 +0100
> +++ gcc/testsuite/g++.dg/cpp23/feat-cxx2b.C	2026-06-11 14:51:41.366869194 +0200
> @@ -563,8 +563,8 @@
>   
>   #ifndef __cpp_named_character_escapes
>   #  error "__cpp_named_character_escapes"
> -#elif __cpp_named_character_escapes != 202207
> -#  error "__cpp_named_character_escapes != 202207"
> +#elif __cpp_named_character_escapes != 202606
> +#  error "__cpp_named_character_escapes != 202606"
>   #endif
>   
>   #ifndef __cpp_static_call_operator
> --- gcc/testsuite/g++.dg/cpp26/feat-cxx26.C.jj	2026-05-26 16:32:28.632304475 +0200
> +++ gcc/testsuite/g++.dg/cpp26/feat-cxx26.C	2026-06-11 14:52:01.595600324 +0200
> @@ -563,8 +563,8 @@
>   
>   #ifndef __cpp_named_character_escapes
>   #  error "__cpp_named_character_escapes"
> -#elif __cpp_named_character_escapes != 202207
> -#  error "__cpp_named_character_escapes != 202207"
> +#elif __cpp_named_character_escapes != 202606
> +#  error "__cpp_named_character_escapes != 202606"
>   #endif
>   
>   #ifndef __cpp_static_call_operator
> --- libcpp/makeuname2c.cc.jj	2026-03-27 10:17:21.571209381 +0100
> +++ libcpp/makeuname2c.cc	2026-06-11 14:37:46.896960517 +0200
> @@ -220,14 +220,7 @@ read_table (char *fname, bool aliases_p)
>   
>         aname = NULL;
>         if (aliases_p)
> -	{
> -	  /* Ignore figment and abbreviation aliases.  */
> -	  if (strcmp (l + 1, "correction\n") != 0
> -	      && strcmp (l + 1, "control\n") != 0
> -	      && strcmp (l + 1, "alternate\n") != 0)
> -	    continue;
> -	  i = ARRAY_SIZE (generated_ranges);
> -	}
> +	i = ARRAY_SIZE (generated_ranges);
>         else
>   	{
>   	  for (i = 0; i < ARRAY_SIZE (generated_ranges); ++i)
> 
> 	Jakub
>