1  /* P2071R2 - Named universal character escapes */
       2  /* { dg-do run } */
       3  /* { dg-require-effective-target wchar } */
       4  /* { dg-options "-std=gnu99 -Wno-c++-compat" { target c } } */
       5  /* { dg-options "-std=c++23" { target c++ } } */
       6  
       7  #ifndef __cplusplus
       8  #include <wchar.h>
       9  typedef __CHAR16_TYPE__ char16_t;
      10  typedef __CHAR32_TYPE__ char32_t;
      11  #endif
      12  
      13  #ifdef __cplusplus
      14  #if U'\u0000' != U'\N{NULL}' \
      15      || U'\u0001' != U'\N{START OF HEADING}' \
      16      || U'\u0002' != U'\N{START OF TEXT}' \
      17      || U'\u0003' != U'\N{END OF TEXT}' \
      18      || U'\u0004' != U'\N{END OF TRANSMISSION}' \
      19      || U'\u0005' != U'\N{ENQUIRY}' \
      20      || U'\u0006' != U'\N{ACKNOWLEDGE}' \
      21      || U'\u0007' != U'\N{ALERT}' \
      22      || U'\u0008' != U'\N{BACKSPACE}' \
      23      || U'\u0009' != U'\N{CHARACTER TABULATION}' \
      24      || U'\u0009' != U'\N{HORIZONTAL TABULATION}' \
      25      || U'\u000A' != U'\N{LINE FEED}' \
      26      || U'\u000A' != U'\N{NEW LINE}' \
      27      || U'\u000A' != U'\N{END OF LINE}' \
      28      || U'\u000B' != U'\N{LINE TABULATION}' \
      29      || U'\u000B' != U'\N{VERTICAL TABULATION}' \
      30      || U'\u000C' != U'\N{FORM FEED}' \
      31      || U'\u000D' != U'\N{CARRIAGE RETURN}' \
      32      || U'\u000E' != U'\N{SHIFT OUT}' \
      33      || U'\u000E' != U'\N{LOCKING-SHIFT ONE}' \
      34      || U'\u000F' != U'\N{SHIFT IN}' \
      35      || U'\u000F' != U'\N{LOCKING-SHIFT ZERO}' \
      36      || U'\u0010' != U'\N{DATA LINK ESCAPE}' \
      37      || U'\u0011' != U'\N{DEVICE CONTROL ONE}' \
      38      || U'\u0012' != U'\N{DEVICE CONTROL TWO}' \
      39      || U'\u0013' != U'\N{DEVICE CONTROL THREE}' \
      40      || U'\u0014' != U'\N{DEVICE CONTROL FOUR}' \
      41      || U'\u0015' != U'\N{NEGATIVE ACKNOWLEDGE}' \
      42      || U'\u0016' != U'\N{SYNCHRONOUS IDLE}' \
      43      || U'\u0017' != U'\N{END OF TRANSMISSION BLOCK}' \
      44      || U'\u0018' != U'\N{CANCEL}' \
      45      || U'\u0019' != U'\N{END OF MEDIUM}' \
      46      || U'\u001A' != U'\N{SUBSTITUTE}' \
      47      || U'\u001B' != U'\N{ESCAPE}' \
      48      || U'\u001C' != U'\N{INFORMATION SEPARATOR FOUR}' \
      49      || U'\u001C' != U'\N{FILE SEPARATOR}' \
      50      || U'\u001D' != U'\N{INFORMATION SEPARATOR THREE}' \
      51      || U'\u001D' != U'\N{GROUP SEPARATOR}' \
      52      || U'\u001E' != U'\N{INFORMATION SEPARATOR TWO}' \
      53      || U'\u001E' != U'\N{RECORD SEPARATOR}' \
      54      || U'\u001F' != U'\N{INFORMATION SEPARATOR ONE}' \
      55      || U'\u001F' != U'\N{UNIT SEPARATOR}' \
      56      || U'\u007F' != U'\N{DELETE}' \
      57      || U'\u0082' != U'\N{BREAK PERMITTED HERE}' \
      58      || U'\u0083' != U'\N{NO BREAK HERE}' \
      59      || U'\u0084' != U'\N{INDEX}' \
      60      || U'\u0085' != U'\N{NEXT LINE}' \
      61      || U'\u0086' != U'\N{START OF SELECTED AREA}' \
      62      || U'\u0087' != U'\N{END OF SELECTED AREA}' \
      63      || U'\u0088' != U'\N{CHARACTER TABULATION SET}' \
      64      || U'\u0088' != U'\N{HORIZONTAL TABULATION SET}' \
      65      || U'\u0089' != U'\N{CHARACTER TABULATION WITH JUSTIFICATION}' \
      66      || U'\u0089' != U'\N{HORIZONTAL TABULATION WITH JUSTIFICATION}' \
      67      || U'\u008A' != U'\N{LINE TABULATION SET}' \
      68      || U'\u008A' != U'\N{VERTICAL TABULATION SET}' \
      69      || U'\u008B' != U'\N{PARTIAL LINE FORWARD}' \
      70      || U'\u008B' != U'\N{PARTIAL LINE DOWN}' \
      71      || U'\u008C' != U'\N{PARTIAL LINE BACKWARD}' \
      72      || U'\u008C' != U'\N{PARTIAL LINE UP}' \
      73      || U'\u008D' != U'\N{REVERSE LINE FEED}' \
      74      || U'\u008D' != U'\N{REVERSE INDEX}' \
      75      || U'\u008E' != U'\N{SINGLE SHIFT TWO}' \
      76      || U'\u008E' != U'\N{SINGLE-SHIFT-2}' \
      77      || U'\u008F' != U'\N{SINGLE SHIFT THREE}' \
      78      || U'\u008F' != U'\N{SINGLE-SHIFT-3}' \
      79      || U'\u0090' != U'\N{DEVICE CONTROL STRING}' \
      80      || U'\u0091' != U'\N{PRIVATE USE ONE}' \
      81      || U'\u0091' != U'\N{PRIVATE USE-1}' \
      82      || U'\u0092' != U'\N{PRIVATE USE TWO}' \
      83      || U'\u0092' != U'\N{PRIVATE USE-2}' \
      84      || U'\u0093' != U'\N{SET TRANSMIT STATE}' \
      85      || U'\u0094' != U'\N{CANCEL CHARACTER}' \
      86      || U'\u0095' != U'\N{MESSAGE WAITING}' \
      87      || U'\u0096' != U'\N{START OF GUARDED AREA}' \
      88      || U'\u0096' != U'\N{START OF PROTECTED AREA}' \
      89      || U'\u0097' != U'\N{END OF GUARDED AREA}' \
      90      || U'\u0097' != U'\N{END OF PROTECTED AREA}' \
      91      || U'\u0098' != U'\N{START OF STRING}' \
      92      || U'\u009A' != U'\N{SINGLE CHARACTER INTRODUCER}' \
      93      || U'\u009B' != U'\N{CONTROL SEQUENCE INTRODUCER}' \
      94      || U'\u009C' != U'\N{STRING TERMINATOR}' \
      95      || U'\u009D' != U'\N{OPERATING SYSTEM COMMAND}' \
      96      || U'\u009E' != U'\N{PRIVACY MESSAGE}' \
      97      || U'\u009F' != U'\N{APPLICATION PROGRAM COMMAND}' \
      98      || U'\u0020' != U'\N{SPACE}' \
      99      || U'\u0030' != U'\N{DIGIT ZERO}' \
     100      || U'\u0053' != U'\N{LATIN CAPITAL LETTER S}'
     101  #error Bad
     102  #endif
     103  #endif
     104  #if U'\U0001F402' != U'\N{OX}' \
     105      || U'\U0001FBA9' != U'\N{BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT AND MIDDLE LEFT TO LOWER CENTRE}' \
     106      || U'\u01FD' != U'\N{LATIN SMALL LETTER AE WITH ACUTE}' \
     107      || U'\u2118' != U'\N{WEIERSTRASS ELLIPTIC FUNCTION}' \
     108      || U'\u2118' != U'\N{SCRIPT CAPITAL P}' \
     109      || U'\uFEFF' != U'\N{BYTE ORDER MARK}' \
     110      || U'\uFEFF' != U'\N{ZERO WIDTH NO-BREAK SPACE}' \
     111      || U'\u116C' != U'\N{HANGUL JUNGSEONG OE}' \
     112      || U'\u1180' != U'\N{HANGUL JUNGSEONG O-E}' \
     113      || U'\u0F60' != U'\N{TIBETAN LETTER -A}' \
     114      || U'\u0F68' != U'\N{TIBETAN LETTER A}' \
     115      || U'\u0F0A' != U'\N{TIBETAN MARK BKA- SHOG YIG MGO}' \
     116      || U'\u0FD0' != U'\N{TIBETAN MARK BKA- SHOG GI MGO RGYAN}' \
     117      || U'\u0FD0' != U'\N{TIBETAN MARK BSKA- SHOG GI MGO RGYAN}' \
     118      || U'\uFE18' != U'\N{PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET}' \
     119      || U'\uFE18' != U'\N{PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRACKET}' \
     120      || U'\u0CF3' != U'\N{KANNADA SIGN COMBINING ANUSVARA ABOVE RIGHT}' \
     121      || U'\u0ECE' != U'\N{LAO YAMAKKAN}' \
     122      || U'\U00010EFE' != U'\N{ARABIC SMALL LOW WORD QASR}' \
     123      || U'\U00011241' != U'\N{KHOJKI VOWEL SIGN VOCALIC R}' \
     124      || U'\U00011B06' != U'\N{DEVANAGARI SIGN WESTERN FIVE-LIKE BHALE}' \
     125      || U'\U00011F0B' != U'\N{KAWI LETTER VOCALIC RR}' \
     126      || U'\U0001342F' != U'\N{EGYPTIAN HIEROGLYPH V011D}' \
     127      || U'\U00013451' != U'\N{EGYPTIAN HIEROGLYPH MODIFIER DAMAGED AT START AND BOTTOM}' \
     128      || U'\U0001B132' != U'\N{HIRAGANA LETTER SMALL KO}' \
     129      || U'\U0001B155' != U'\N{KATAKANA LETTER SMALL KO}' \
     130      || U'\U0001D2C4' != U'\N{KAKTOVIK NUMERAL FOUR}' \
     131      || U'\U0001DF27' != U'\N{LATIN SMALL LETTER N WITH MID-HEIGHT LEFT HOOK}' \
     132      || U'\U0001E036' != U'\N{MODIFIER LETTER CYRILLIC SMALL ZHE}' \
     133      || U'\U0001E05B' != U'\N{CYRILLIC SUBSCRIPT SMALL LETTER EL}' \
     134      || U'\U0001E4E5' != U'\N{NAG MUNDARI LETTER ENN}' \
     135      || U'\U0001F6DC' != U'\N{WIRELESS}' \
     136      || U'\U0001F77E' != U'\N{QUAOAR}' \
     137      || U'\U0001F7D9' != U'\N{NINE POINTED WHITE STAR}' \
     138      || U'\U0001FA76' != U'\N{GREY HEART}' \
     139      || U'\U0001FA88' != U'\N{FLUTE}' \
     140      || U'\U0001FABC' != U'\N{JELLYFISH}' \
     141      || U'\uAC00' != U'\N{HANGUL SYLLABLE GA}' \
     142      || U'\uAC02' != U'\N{HANGUL SYLLABLE GAGG}' \
     143      || U'\uAD8D' != U'\N{HANGUL SYLLABLE GWEONJ}' \
     144      || U'\uAE4D' != U'\N{HANGUL SYLLABLE GGAG}' \
     145      || U'\uAE4E' != U'\N{HANGUL SYLLABLE GGAGG}' \
     146      || U'\uC544' != U'\N{HANGUL SYLLABLE A}' \
     147      || U'\uC55F' != U'\N{HANGUL SYLLABLE AH}' \
     148      || U'\uC560' != U'\N{HANGUL SYLLABLE AE}' \
     149      || U'\uD7A3' != U'\N{HANGUL SYLLABLE HIH}' \
     150      || U'\u3400' != U'\N{CJK UNIFIED IDEOGRAPH-3400}' \
     151      || U'\u4DBF' != U'\N{CJK UNIFIED IDEOGRAPH-4DBF}' \
     152      || U'\u4E00' != U'\N{CJK UNIFIED IDEOGRAPH-4E00}' \
     153      || U'\u9FFC' != U'\N{CJK UNIFIED IDEOGRAPH-9FFC}' \
     154      || U'\U00020000' != U'\N{CJK UNIFIED IDEOGRAPH-20000}' \
     155      || U'\U0002A6DD' != U'\N{CJK UNIFIED IDEOGRAPH-2A6DD}' \
     156      || U'\U00020700' != U'\N{CJK UNIFIED IDEOGRAPH-20700}' \
     157      || U'\U0002B734' != U'\N{CJK UNIFIED IDEOGRAPH-2B734}' \
     158      || U'\U0002B739' != U'\N{CJK UNIFIED IDEOGRAPH-2B739}' \
     159      || U'\U0002B740' != U'\N{CJK UNIFIED IDEOGRAPH-2B740}' \
     160      || U'\U0002B81D' != U'\N{CJK UNIFIED IDEOGRAPH-2B81D}' \
     161      || U'\U0002B820' != U'\N{CJK UNIFIED IDEOGRAPH-2B820}' \
     162      || U'\U0002CEA1' != U'\N{CJK UNIFIED IDEOGRAPH-2CEA1}' \
     163      || U'\U0002CEB0' != U'\N{CJK UNIFIED IDEOGRAPH-2CEB0}' \
     164      || U'\U0002EBE0' != U'\N{CJK UNIFIED IDEOGRAPH-2EBE0}' \
     165      || U'\U00030000' != U'\N{CJK UNIFIED IDEOGRAPH-30000}' \
     166      || U'\U0003134A' != U'\N{CJK UNIFIED IDEOGRAPH-3134A}' \
     167      || U'\U00031350' != U'\N{CJK UNIFIED IDEOGRAPH-31350}' \
     168      || U'\U000323AF' != U'\N{CJK UNIFIED IDEOGRAPH-323AF}' \
     169      || U'\U00017000' != U'\N{TANGUT IDEOGRAPH-17000}' \
     170      || U'\U000187F7' != U'\N{TANGUT IDEOGRAPH-187F7}' \
     171      || U'\U00018D00' != U'\N{TANGUT IDEOGRAPH-18D00}' \
     172      || U'\U00018D08' != U'\N{TANGUT IDEOGRAPH-18D08}' \
     173      || U'\U00018B00' != U'\N{KHITAN SMALL SCRIPT CHARACTER-18B00}' \
     174      || U'\U00018CD5' != U'\N{KHITAN SMALL SCRIPT CHARACTER-18CD5}' \
     175      || U'\U0001B170' != U'\N{NUSHU CHARACTER-1B170}' \
     176      || U'\U0001B2FB' != U'\N{NUSHU CHARACTER-1B2FB}' \
     177      || U'\uF900' != U'\N{CJK COMPATIBILITY IDEOGRAPH-F900}' \
     178      || U'\uFA6D' != U'\N{CJK COMPATIBILITY IDEOGRAPH-FA6D}' \
     179      || U'\uFA70' != U'\N{CJK COMPATIBILITY IDEOGRAPH-FA70}' \
     180      || U'\uFAD9' != U'\N{CJK COMPATIBILITY IDEOGRAPH-FAD9}' \
     181      || U'\U0002F800' != U'\N{CJK COMPATIBILITY IDEOGRAPH-2F800}' \
     182      || U'\U0002FA1D' != U'\N{CJK COMPATIBILITY IDEOGRAPH-2FA1D}'
     183  #error Bad
     184  #endif
     185  
     186  const char32_t *a = U"\N{HEBREW LETTER KAF}\N{HEBREW LETTER FINAL NUN}";
     187  const char32_t *b = U"\N{OX}\N{BOX DRAWINGS LIGHT DIAGONAL UPPER CENTRE TO MIDDLE RIGHT AND MIDDLE LEFT TO LOWER CENTRE}";
     188  
     189  #define b\N{LATIN SMALL LETTER O WITH ACUTE}x U'\U0001FBA9'
     190  
     191  int
     192  main ()
     193  {
     194    if (a[0] != U'\u05DB' || a[1] != U'\U000005DF' || a[2]
     195        || b[0] != U'\U0001F402' || b[1] != b\u{f3}x || b[2])
     196      __builtin_abort ();
     197    return 0;
     198  }