1  // P2295R6 - Support for UTF-8 as a portable source file encoding
       2  // This test intentionally contains various byte sequences which are not valid UTF-8
       3  // { dg-do preprocess { target { c || c++11 } } }
       4  // { dg-require-effective-target wchar }
       5  // { dg-options "-finput-charset=UTF-8 -Winvalid-utf8" }
       6  // { dg-additional-options "-std=gnu99" { target c } }
       7  
       8  #ifndef __cplusplus
       9  #include <wchar.h>
      10  typedef __CHAR16_TYPE__ char16_t;
      11  typedef __CHAR32_TYPE__ char32_t;
      12  #endif
      13  
      14  char32_t a = U'�';				// { dg-warning "invalid UTF-8 character <80>" }
      15  char32_t b = U'�';				// { dg-warning "invalid UTF-8 character <bf>" }
      16  char32_t c = U'�';				// { dg-warning "invalid UTF-8 character <c0>" }
      17  char32_t d = U'�';				// { dg-warning "invalid UTF-8 character <c1>" }
      18  char32_t e = U'�';				// { dg-warning "invalid UTF-8 character <f5>" }
      19  char32_t f = U'�';				// { dg-warning "invalid UTF-8 character <ff>" }
      20  char32_t g = U'�';				// { dg-warning "invalid UTF-8 character <c2>" }
      21  char32_t h = U'�';				// { dg-warning "invalid UTF-8 character <e0>" }
      22  char32_t i = U'���';				// { dg-warning "invalid UTF-8 character <e0><80><bf>" }
      23  char32_t j = U'���';				// { dg-warning "invalid UTF-8 character <e0><9f><80>" }
      24  char32_t k = U'�';				// { dg-warning "invalid UTF-8 character <e0><bf>" }
      25  char32_t l = U'�';				// { dg-warning "invalid UTF-8 character <ec><80>" }
      26  char32_t m = U'���';				// { dg-warning "invalid UTF-8 character <ed><a0><80>" }
      27  char32_t n = U'����';				// { dg-warning "invalid UTF-8 character <f0><80><80><80>" }
      28  char32_t o = U'����';				// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" }
      29  char32_t p = U'����';				// { dg-warning "invalid UTF-8 character <f4><90><80><80>" }
      30  char32_t q = U'������';				// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" }
      31  						// { dg-warning "invalid UTF-8 character <bf>" "" { target *-*-* } .-1 }
      32  const char32_t *A = U"߿ࠀ𐀀";	// { dg-bogus "invalid UTF-8 character" }
      33  const char32_t *B = U"�";			// { dg-warning "invalid UTF-8 character <80>" }
      34  const char32_t *C = U"�";			// { dg-warning "invalid UTF-8 character <bf>" }
      35  const char32_t *D = U"�";			// { dg-warning "invalid UTF-8 character <c0>" }
      36  const char32_t *E = U"�";			// { dg-warning "invalid UTF-8 character <c1>" }
      37  const char32_t *F = U"�";			// { dg-warning "invalid UTF-8 character <f5>" }
      38  const char32_t *G = U"�";			// { dg-warning "invalid UTF-8 character <ff>" }
      39  const char32_t *H = U"�";			// { dg-warning "invalid UTF-8 character <c2>" }
      40  const char32_t *I = U"�";			// { dg-warning "invalid UTF-8 character <e0>" }
      41  const char32_t *J = U"���";			// { dg-warning "invalid UTF-8 character <e0><80><bf>" }
      42  const char32_t *K = U"���";			// { dg-warning "invalid UTF-8 character <e0><9f><80>" }
      43  const char32_t *L = U"�";			// { dg-warning "invalid UTF-8 character <e0><bf>" }
      44  const char32_t *M = U"�";			// { dg-warning "invalid UTF-8 character <ec><80>" }
      45  const char32_t *N = U"���";			// { dg-warning "invalid UTF-8 character <ed><a0><80>" }
      46  const char32_t *O = U"����";			// { dg-warning "invalid UTF-8 character <f0><80><80><80>" }
      47  const char32_t *P = U"����";			// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" }
      48  const char32_t *Q = U"����";			// { dg-warning "invalid UTF-8 character <f4><90><80><80>" }
      49  const char32_t *R = U"������";			// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" }
      50  						// { dg-warning "invalid UTF-8 character <bf>" "" { target *-*-* } .-1 }
      51  const char32_t *A1 = UR"(߿ࠀ𐀀)"; // { dg-bogus "invalid UTF-8 character" }
      52  const char32_t *B1 = UR"(�)";			// { dg-warning "invalid UTF-8 character <80>" }
      53  const char32_t *C1 = UR"(�)";			// { dg-warning "invalid UTF-8 character <bf>" }
      54  const char32_t *D1 = UR"(�)";			// { dg-warning "invalid UTF-8 character <c0>" }
      55  const char32_t *E1 = UR"(�)";			// { dg-warning "invalid UTF-8 character <c1>" }
      56  const char32_t *F1 = UR"(�)";			// { dg-warning "invalid UTF-8 character <f5>" }
      57  const char32_t *G1 = UR"(�)";			// { dg-warning "invalid UTF-8 character <ff>" }
      58  const char32_t *H1 = UR"(�)";			// { dg-warning "invalid UTF-8 character <c2>" }
      59  const char32_t *I1 = UR"(�)";			// { dg-warning "invalid UTF-8 character <e0>" }
      60  const char32_t *J1 = UR"(���)";			// { dg-warning "invalid UTF-8 character <e0><80><bf>" }
      61  const char32_t *K1 = UR"(���)";			// { dg-warning "invalid UTF-8 character <e0><9f><80>" }
      62  const char32_t *L1 = UR"(�)";			// { dg-warning "invalid UTF-8 character <e0><bf>" }
      63  const char32_t *M1 = UR"(�)";			// { dg-warning "invalid UTF-8 character <ec><80>" }
      64  const char32_t *N1 = UR"(���)";			// { dg-warning "invalid UTF-8 character <ed><a0><80>" }
      65  const char32_t *O1 = UR"(����)";		// { dg-warning "invalid UTF-8 character <f0><80><80><80>" }
      66  const char32_t *P1 = UR"(����)";		// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" }
      67  const char32_t *Q1 = UR"(����)";		// { dg-warning "invalid UTF-8 character <f4><90><80><80>" }
      68  const char32_t *R1 = UR"(������)";		// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" }
      69  						// { dg-warning "invalid UTF-8 character <bf>" "" { target *-*-* } .-1 }
      70  const char *A2 = u8"߿ࠀ𐀀";	// { dg-bogus "invalid UTF-8 character" }
      71  const char *B2 = u8"�";				// { dg-warning "invalid UTF-8 character <80>" }
      72  const char *C2 = u8"�";				// { dg-warning "invalid UTF-8 character <bf>" }
      73  const char *D2 = u8"�";				// { dg-warning "invalid UTF-8 character <c0>" }
      74  const char *E2 = u8"�";				// { dg-warning "invalid UTF-8 character <c1>" }
      75  const char *F2 = u8"�";				// { dg-warning "invalid UTF-8 character <f5>" }
      76  const char *G2 = u8"�";				// { dg-warning "invalid UTF-8 character <ff>" }
      77  const char *H2 = u8"�";				// { dg-warning "invalid UTF-8 character <c2>" }
      78  const char *I2 = u8"�";				// { dg-warning "invalid UTF-8 character <e0>" }
      79  const char *J2 = u8"���";			// { dg-warning "invalid UTF-8 character <e0><80><bf>" }
      80  const char *K2 = u8"���";			// { dg-warning "invalid UTF-8 character <e0><9f><80>" }
      81  const char *L2 = u8"�";			// { dg-warning "invalid UTF-8 character <e0><bf>" }
      82  const char *M2 = u8"�";			// { dg-warning "invalid UTF-8 character <ec><80>" }
      83  const char *N2 = u8"���";			// { dg-warning "invalid UTF-8 character <ed><a0><80>" }
      84  const char *O2 = u8"����";			// { dg-warning "invalid UTF-8 character <f0><80><80><80>" }
      85  const char *P2 = u8"����";			// { dg-warning "invalid UTF-8 character <f0><8f><bf><bf>" }
      86  const char *Q2 = u8"����";			// { dg-warning "invalid UTF-8 character <f4><90><80><80>" }
      87  const char *R2 = u8"������";			// { dg-warning "invalid UTF-8 character <fd><bf><bf><bf>" }
      88  						// { dg-warning "invalid UTF-8 character <bf>" "" { target *-*-* } .-1 }