annotate gcc/testsuite/gcc.dg/c11-uni-string-1.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 /* Test Unicode strings in C11. Test valid code. */
kono
parents:
diff changeset
2 /* { dg-do run } */
kono
parents:
diff changeset
3 /* { dg-options "-std=c11 -pedantic-errors" } */
kono
parents:
diff changeset
4
kono
parents:
diff changeset
5 /* More thorough tests are in c-c++-common/raw-string-*.c; this test
kono
parents:
diff changeset
6 verifies the particular subset (Unicode but not raw strings) that
kono
parents:
diff changeset
7 is in C11. */
kono
parents:
diff changeset
8
kono
parents:
diff changeset
9 typedef __CHAR16_TYPE__ char16_t;
kono
parents:
diff changeset
10 typedef __CHAR32_TYPE__ char32_t;
kono
parents:
diff changeset
11 typedef __SIZE_TYPE__ size_t;
kono
parents:
diff changeset
12
kono
parents:
diff changeset
13 extern void abort (void);
kono
parents:
diff changeset
14 extern void exit (int);
kono
parents:
diff changeset
15 extern int memcmp (const void *, const void *, size_t);
kono
parents:
diff changeset
16
kono
parents:
diff changeset
17 #define R "(R)"
kono
parents:
diff changeset
18 #define u8R "(u8R)"
kono
parents:
diff changeset
19 #define uR "(uR)"
kono
parents:
diff changeset
20 #define UR "(UR)"
kono
parents:
diff changeset
21 #define LR "(LR)"
kono
parents:
diff changeset
22 #define u8 randomu8
kono
parents:
diff changeset
23 #define u randomu
kono
parents:
diff changeset
24 #define U randomU
kono
parents:
diff changeset
25
kono
parents:
diff changeset
26 const char su8[] = u8"a\u010d";
kono
parents:
diff changeset
27 const char su8a[] = "a\xc4\x8d";
kono
parents:
diff changeset
28
kono
parents:
diff changeset
29 const char16_t su16[] = u"\u0567";
kono
parents:
diff changeset
30 const char16_t su16a[] = { 0x0567, 0 };
kono
parents:
diff changeset
31
kono
parents:
diff changeset
32 const char32_t su32[] = U"\u0123";
kono
parents:
diff changeset
33 const char32_t su32a[] = { 0x0123, 0 };
kono
parents:
diff changeset
34
kono
parents:
diff changeset
35 const char tu[] = R"a";
kono
parents:
diff changeset
36 const char tua[] = "(R)a";
kono
parents:
diff changeset
37
kono
parents:
diff changeset
38 const char tu8[] = u8R"b";
kono
parents:
diff changeset
39 const char tu8a[] = "(u8R)b";
kono
parents:
diff changeset
40
kono
parents:
diff changeset
41 const char tu16[] = uR"c";
kono
parents:
diff changeset
42 const char tu16a[] = "(uR)c";
kono
parents:
diff changeset
43
kono
parents:
diff changeset
44 const char tu32[] = UR"d";
kono
parents:
diff changeset
45 const char tu32a[] = "(UR)d";
kono
parents:
diff changeset
46
kono
parents:
diff changeset
47 const char tl[] = LR"e";
kono
parents:
diff changeset
48 const char tla[] = "(LR)e";
kono
parents:
diff changeset
49
kono
parents:
diff changeset
50 #define str(x) #x
kono
parents:
diff changeset
51 const char ts[] = str(u"a" U"b" u8"c");
kono
parents:
diff changeset
52 const char tsa[] = "u\"a\" U\"b\" u8\"c\"";
kono
parents:
diff changeset
53
kono
parents:
diff changeset
54 /* GCC always uses UTF-16 and UTF-32 for char16_t and char32_t. */
kono
parents:
diff changeset
55 #ifndef __STDC_UTF_16__
kono
parents:
diff changeset
56 #error "__STDC_UTF_16__ not defined"
kono
parents:
diff changeset
57 #endif
kono
parents:
diff changeset
58 #ifndef __STDC_UTF_32__
kono
parents:
diff changeset
59 #error "__STDC_UTF_32__ not defined"
kono
parents:
diff changeset
60 #endif
kono
parents:
diff changeset
61 #define xstr(x) str(x)
kono
parents:
diff changeset
62 const char tm16[] = xstr(__STDC_UTF_16__);
kono
parents:
diff changeset
63 const char tm16a[] = "1";
kono
parents:
diff changeset
64 const char tm32[] = xstr(__STDC_UTF_32__);
kono
parents:
diff changeset
65 const char tm32a[] = "1";
kono
parents:
diff changeset
66
kono
parents:
diff changeset
67 int
kono
parents:
diff changeset
68 main (void)
kono
parents:
diff changeset
69 {
kono
parents:
diff changeset
70 if (sizeof (su8) != sizeof (su8a)
kono
parents:
diff changeset
71 || memcmp (su8, su8a, sizeof (su8)) != 0)
kono
parents:
diff changeset
72 abort ();
kono
parents:
diff changeset
73 if (sizeof (su16) != sizeof (su16a)
kono
parents:
diff changeset
74 || memcmp (su16, su16a, sizeof (su16)) != 0)
kono
parents:
diff changeset
75 abort ();
kono
parents:
diff changeset
76 if (sizeof (su32) != sizeof (su32a)
kono
parents:
diff changeset
77 || memcmp (su32, su32a, sizeof (su32)) != 0)
kono
parents:
diff changeset
78 abort ();
kono
parents:
diff changeset
79 if (sizeof (tu) != sizeof (tua)
kono
parents:
diff changeset
80 || memcmp (tu, tua, sizeof (tu)) != 0)
kono
parents:
diff changeset
81 abort ();
kono
parents:
diff changeset
82 if (sizeof (tu8) != sizeof (tu8a)
kono
parents:
diff changeset
83 || memcmp (tu8, tu8a, sizeof (tu8)) != 0)
kono
parents:
diff changeset
84 abort ();
kono
parents:
diff changeset
85 if (sizeof (tu16) != sizeof (tu16a)
kono
parents:
diff changeset
86 || memcmp (tu16, tu16a, sizeof (tu16)) != 0)
kono
parents:
diff changeset
87 abort ();
kono
parents:
diff changeset
88 if (sizeof (tu32) != sizeof (tu32a)
kono
parents:
diff changeset
89 || memcmp (tu32, tu32a, sizeof (tu32)) != 0)
kono
parents:
diff changeset
90 abort ();
kono
parents:
diff changeset
91 if (sizeof (tl) != sizeof (tla)
kono
parents:
diff changeset
92 || memcmp (tl, tla, sizeof (tl)) != 0)
kono
parents:
diff changeset
93 abort ();
kono
parents:
diff changeset
94 if (sizeof (ts) != sizeof (tsa)
kono
parents:
diff changeset
95 || memcmp (ts, tsa, sizeof (ts)) != 0)
kono
parents:
diff changeset
96 abort ();
kono
parents:
diff changeset
97 if (sizeof (tm16) != sizeof (tm16a)
kono
parents:
diff changeset
98 || memcmp (tm16, tm16a, sizeof (tm16)) != 0)
kono
parents:
diff changeset
99 abort ();
kono
parents:
diff changeset
100 if (sizeof (tm32) != sizeof (tm32a)
kono
parents:
diff changeset
101 || memcmp (tm32, tm32a, sizeof (tm32)) != 0)
kono
parents:
diff changeset
102 abort ();
kono
parents:
diff changeset
103 if (u'\u0123' != 0x0123)
kono
parents:
diff changeset
104 abort ();
kono
parents:
diff changeset
105 if (U'\u0456' != 0x0456)
kono
parents:
diff changeset
106 abort ();
kono
parents:
diff changeset
107 #undef u8
kono
parents:
diff changeset
108 #define u8
kono
parents:
diff changeset
109 if (u8'a' != 'a')
kono
parents:
diff changeset
110 abort ();
kono
parents:
diff changeset
111 exit (0);
kono
parents:
diff changeset
112 }