1
+ // RUN: %clang_cc1 -triple x86_64-apple-darwin -std=c++03 -Wfour-char-constants -fsyntax-only -verify=cxx03,expected %s
1
2
// RUN: %clang_cc1 -triple x86_64-apple-darwin -std=c++11 -Wfour-char-constants -fsyntax-only -verify=cxx,expected %s
2
3
// RUN: %clang_cc1 -triple x86_64-apple-darwin -std=c++17 -Wfour-char-constants -fsyntax-only -verify=cxx,expected %s
3
4
// RUN: %clang_cc1 -triple x86_64-apple-darwin -std=c++20 -Wfour-char-constants -fsyntax-only -verify=cxx,expected %s
4
- // RUN: %clang_cc1 -triple x86_64-apple-darwin -std=c11 -x c -Wfour-char-constants -fsyntax-only -verify=c ,expected %s
5
- // RUN: %clang_cc1 -triple x86_64-apple-darwin -std=c2x -x c -Wfour-char-constants -fsyntax-only -verify=c ,expected %s
5
+ // RUN: %clang_cc1 -triple x86_64-apple-darwin -std=c11 -x c -Wfour-char-constants -fsyntax-only -verify=c11 ,expected %s
6
+ // RUN: %clang_cc1 -triple x86_64-apple-darwin -std=c2x -x c -Wfour-char-constants -fsyntax-only -verify=c2x ,expected %s
6
7
7
8
#ifndef __cplusplus
8
9
typedef __WCHAR_TYPE__ wchar_t ;
@@ -17,6 +18,7 @@ int c = 'APPS'; // expected-warning {{multi-character character constant}}
17
18
char d = ' ⌘' ; // expected-error {{character too large for enclosing character literal type}}
18
19
char e = ' \u2318 ' ; // expected-error {{character too large for enclosing character literal type}}
19
20
21
+ #if !defined(__cplusplus) || __cplusplus > 201100L
20
22
#ifdef __cplusplus
21
23
auto f = ' \xE2\x8C\x98 ' ; // expected-warning {{multi-character character constant}}
22
24
#endif
@@ -44,18 +46,19 @@ char16_t q[2] = u"\U00010000";
44
46
45
47
// UTF-8 character literal code point ranges.
46
48
#if __cplusplus >= 201703L || __STDC_VERSION__ >= 201710L
47
- _Static_assert (u8 ' \U00000000 ' == 0x00 , " " ); // c -error {{universal character name refers to a control character}}
48
- _Static_assert (u8 ' \U0000007F ' == 0x7F , " " ); // c -error {{universal character name refers to a control character}}
49
- _Static_assert (u8 ' \U00000080 ' , " " ); // c -error {{universal character name refers to a control character}}
49
+ _Static_assert (u8 ' \U00000000 ' == 0x00 , " " ); // c11 -error {{universal character name refers to a control character}}
50
+ _Static_assert (u8 ' \U0000007F ' == 0x7F , " " ); // c11 -error {{universal character name refers to a control character}}
51
+ _Static_assert (u8 ' \U00000080 ' , " " ); // c11 -error {{universal character name refers to a control character}}
50
52
// cxx-error@-1 {{character too large for enclosing character literal type}}
53
+ // c2x-error@-2 {{character too large for enclosing character literal type}}
51
54
_Static_assert ((unsigned char )u8'\xFF' == (unsigned char )0xFF, "");
52
55
#endif
53
56
54
57
// UTF-8 string literal code point ranges.
55
- _Static_assert (u8" \U00000000 " [0 ] == 0x00 , " " ); // c -error {{universal character name refers to a control character}}
56
- _Static_assert (u8" \U0000007F " [0 ] == 0x7F , " " ); // c -error {{universal character name refers to a control character}}
57
- _Static_assert ((unsigned char )u8"\U00000080"[0] == (unsigned char )0xC2, ""); // c -error {{universal character name refers to a control character}}
58
- _Static_assert ((unsigned char )u8"\U00000080"[1] == (unsigned char )0x80, ""); // c -error {{universal character name refers to a control character}}
58
+ _Static_assert (u8" \U00000000 " [0 ] == 0x00 , " " ); // c11 -error {{universal character name refers to a control character}}
59
+ _Static_assert (u8" \U0000007F " [0 ] == 0x7F , " " ); // c11 -error {{universal character name refers to a control character}}
60
+ _Static_assert ((unsigned char )u8"\U00000080"[0] == (unsigned char )0xC2, ""); // c11 -error {{universal character name refers to a control character}}
61
+ _Static_assert ((unsigned char )u8"\U00000080"[1] == (unsigned char )0x80, ""); // c11 -error {{universal character name refers to a control character}}
59
62
_Static_assert ((unsigned char )u8"\U000007FF"[0] == (unsigned char )0xDF, "");
60
63
_Static_assert ((unsigned char )u8"\U000007FF"[1] == (unsigned char )0xBF, "");
61
64
_Static_assert ((unsigned char )u8"\U00000800"[0] == (unsigned char )0xE0, "");
@@ -84,14 +87,14 @@ _Static_assert(u8"\U00110000"[0], ""); // expected-error {{invalid universal cha
84
87
#endif
85
88
86
89
// UTF-16 character literal code point ranges.
87
- _Static_assert (u' \U00000000 ' == 0x0000 , " " ); // c -error {{universal character name refers to a control character}}
90
+ _Static_assert (u' \U00000000 ' == 0x0000 , " " ); // c11 -error {{universal character name refers to a control character}}
88
91
_Static_assert (u' \U0000D800 ' , " " ); // expected-error {{invalid universal character}}
89
92
_Static_assert (u' \U0000DFFF ' , " " ); // expected-error {{invalid universal character}}
90
93
_Static_assert (u' \U0000FFFF ' == 0xFFFF , " " );
91
94
_Static_assert (u' \U00010000 ' , " " ); // expected-error {{character too large for enclosing character literal type}}
92
95
93
96
// UTF-16 string literal code point ranges.
94
- _Static_assert (u" \U00000000 " [0 ] == 0x0000 , " " ); // c -error {{universal character name refers to a control character}}
97
+ _Static_assert (u" \U00000000 " [0 ] == 0x0000 , " " ); // c11 -error {{universal character name refers to a control character}}
95
98
_Static_assert (u" \U0000D800 " [0 ], " " ); // expected-error {{invalid universal character}}
96
99
_Static_assert (u" \U0000DFFF " [0 ], " " ); // expected-error {{invalid universal character}}
97
100
_Static_assert (u" \U0000FFFF " [0 ] == 0xFFFF , " " );
@@ -109,13 +112,24 @@ _Static_assert(u"\U00110000"[0], ""); // expected-error {{invalid universal char
109
112
#endif
110
113
111
114
// UTF-32 character literal code point ranges.
112
- _Static_assert (U' \U00000000 ' == 0x00000000 , " " ); // c -error {{universal character name refers to a control character}}
115
+ _Static_assert (U' \U00000000 ' == 0x00000000 , " " ); // c11 -error {{universal character name refers to a control character}}
113
116
_Static_assert (U' \U0010FFFF ' == 0x0010FFFF , " " );
114
117
_Static_assert (U' \U00110000 ' , " " ); // expected-error {{invalid universal character}}
115
118
116
119
// UTF-32 string literal code point ranges.
117
- _Static_assert (U" \U00000000 " [0 ] == 0x00000000 , " " ); // c -error {{universal character name refers to a control character}}
120
+ _Static_assert (U" \U00000000 " [0 ] == 0x00000000 , " " ); // c11 -error {{universal character name refers to a control character}}
118
121
_Static_assert (U" \U0000D800 " [0 ], " " ); // expected-error {{invalid universal character}}
119
122
_Static_assert (U" \U0000DFFF " [0 ], " " ); // expected-error {{invalid universal character}}
120
123
_Static_assert (U" \U0010FFFF " [0 ] == 0x0010FFFF , " " );
121
124
_Static_assert (U" \U00110000 " [0 ], " " ); // expected-error {{invalid universal character}}
125
+
126
+ #endif // !defined(__cplusplus) || __cplusplus > 201100L
127
+
128
+ _Static_assert (' \u0024 ' == ' $' , " " );
129
+ _Static_assert (' \u0040 ' == ' @' , " " );
130
+ _Static_assert (' \u0060 ' == ' `' , " " );
131
+
132
+ _Static_assert (' \u0061 ' == ' a' , " " ); // c11-error {{character 'a' cannot be specified by a universal character name}} \
133
+ // cxx03-error {{character 'a' cannot be specified by a universal character name}}
134
+ _Static_assert (' \u0000 ' == ' \0 ' , " " ); // c11-error {{universal character name refers to a control character}} \
135
+ // cxx03-error {{universal character name refers to a control character}}
0 commit comments