[docs] Add LICENSE.txt to the root of the mono-repo
[llvm-project.git] / clang / test / Lexer / char-escapes-delimited.c
blob65e3dc740e3b4168e06026b8e6c9227f999edae6
1 // RUN: %clang_cc1 -x c++ -std=gnu++11 -fsyntax-only -pedantic -verify=ext,expected %s
2 // RUN: %clang_cc1 -x c -std=gnu11 -fsyntax-only -pedantic -verify=ext,expected %s
3 // RUN: %clang_cc1 -x c++ -std=c++2b -fsyntax-only -pedantic -verify=cxx2b,expected -Wpre-c++2b-compat %s
4 // RUN: %clang_cc1 -x c++ -std=gnu++11 -fwchar-type=short -fno-signed-wchar -fsyntax-only -pedantic -verify=ext,expected %s
5 // RUN: %clang_cc1 -x c -std=gnu11 -fwchar-type=short -fno-signed-wchar -fsyntax-only -pedantic -verify=ext,expected %s
6 // RUN: %clang_cc1 -x c++ -std=c++17 -ftrigraphs -fsyntax-only -pedantic -verify=ext,expected -DTRIGRAPHS=1 %s
8 const char *errors =
9 "\u{}" // expected-error {{delimited escape sequence cannot be empty}}
10 "\u{" // expected-error {{expected '}'}}
11 "\u{h}" // expected-error {{invalid digit 'h' in escape sequence}}
12 "\x{}" // expected-error {{delimited escape sequence cannot be empty}}
13 "\x{" // expected-error {{expected '}'}}
14 "\x{h}" // expected-error {{invalid digit 'h' in escape sequence}}
15 "\o{}" // expected-error {{delimited escape sequence cannot be empty}}
16 "\o{" // expected-error {{expected '}'}}
17 "\o" // expected-error {{expected '{' after '\o' escape sequence}}
18 "\o{8}" // expected-error {{invalid digit '8' in escape sequence}}
19 "\U{8}" // expected-error {{\U used with no following hex digits}}
22 void ucn(void) {
23 char a = '\u{1234}'; // expected-error {{character too large for enclosing character literal type}} \
24 // ext-warning {{extension}} cxx2b-warning {{C++2b}}
26 unsigned b = U'\u{1234}'; // ext-warning {{extension}} cxx2b-warning {{C++2b}}
28 #ifdef __cplusplus
29 unsigned b2 = U'\u{1}'; // ext-warning {{extension}} cxx2b-warning {{C++2b}}
30 #else
31 unsigned b2 = U'\u{1}'; //expected-error {{universal character name refers to a control character}}
32 #endif
34 unsigned c = U'\u{000000000001234}'; // ext-warning {{extension}} cxx2b-warning {{C++2b}}
35 unsigned d = U'\u{111111111}'; //expected-error {{hex escape sequence out of range}}
38 void hex(void) {
39 char a = '\x{1}'; // ext-warning {{extension}} cxx2b-warning {{C++2b}}
40 char b = '\x{abcdegggggabc}'; // expected-error 5{{invalid digit 'g' in escape sequence}}
41 char c = '\x{ff1}'; // expected-error {{hex escape sequence out of range}}
43 #if __WCHAR_MAX__ > 0xFFFF
44 unsigned d = L'\x{FFFFFFFF}'; // ext-warning {{extension}} cxx2b-warning {{C++2b}}
45 unsigned e = L'\x{100000000}'; // expected-error {{hex escape sequence out of range}}
46 #else
47 unsigned f = L'\x{FFFF}'; // ext-warning {{extension}} cxx2b-warning {{C++2b}}
48 unsigned g = L'\x{10000}'; // expected-error {{hex escape sequence out of range}}
49 #endif
50 unsigned h = U'\x{FFFFFFFF}'; // ext-warning {{extension}} cxx2b-warning {{C++2b}}
51 unsigned i = U'\x{100000000}'; // expected-error {{hex escape sequence out of range}}
54 void octal(void) {
55 char a = '\o{1}'; // ext-warning {{extension}} cxx2b-warning {{C++2b}}
56 char b = '\o{12345678881238}'; // expected-error 4{{invalid digit '8' in escape sequence}}
57 char c = '\o{777}'; // //expected-error {{octal escape sequence out of range}}
58 #if __WCHAR_MAX__ > 0xFFFF
59 unsigned d = L'\o{37777777777}'; // ext-warning {{extension}} cxx2b-warning {{C++2b}}
60 unsigned e = L'\o{40000000000}'; // expected-error {{octal escape sequence out of range}}
61 #else
62 unsigned d = L'\o{177777}'; // ext-warning {{extension}} cxx2b-warning {{C++2b}}
63 unsigned e = L'\o{200000}'; // expected-error {{octal escape sequence out of range}}
64 #endif
67 void concat(void) {
68 (void)"\x{" "12}"; // expected-error {{expected '}'}}
69 (void)"\u{" "12}"; // expected-error {{expected '}'}}
70 (void)"\o{" "12}"; // expected-error {{expected '}'}}
72 (void)"\x{12" "}"; // expected-error {{expected '}'}}
73 (void)"\u{12" "}"; // expected-error {{expected '}'}}
74 (void)"\o{12" "}"; // expected-error {{expected '}'}}
77 void named(void) {
78 char a = '\N{LOTUS}'; // expected-error{{character too large for enclosing character literal type}} \
79 // ext-warning {{extension}} cxx2b-warning {{C++2b}}
81 char b = '\N{DOLLAR SIGN}'; // ext-warning {{extension}} cxx2b-warning {{C++2b}}
82 char b_ = '\N{ DOL-LAR _SIGN }'; // expected-error {{' DOL-LAR _SIGN ' is not a valid Unicode character name}} \
83 // expected-note {{characters names in Unicode escape sequences are sensitive to case and whitespaces}}
85 char c = '\N{NOTATHING}'; // expected-error {{'NOTATHING' is not a valid Unicode character name}} \
86 // expected-note 5{{did you mean}}
87 char d = '\N{}'; // expected-error {{delimited escape sequence cannot be empty}}
88 char e = '\N{'; // expected-error {{incomplete universal character name}}
90 unsigned f = L'\N{GREEK CAPITAL LETTER DELTA}'; // ext-warning {{extension}} cxx2b-warning {{C++2b}}
92 unsigned g = u'\N{LOTUS}'; // expected-error {{character too large for enclosing character literal type}} \
93 // ext-warning {{extension}} cxx2b-warning {{C++2b}}
95 unsigned h = U'\N{LOTUS}'; // ext-warning {{extension}} cxx2b-warning {{C++2b}}
96 unsigned i = u'\N{GREEK CAPITAL LETTER DELTA}'; // ext-warning {{extension}} cxx2b-warning {{C++2b}}
97 char j = '\NN'; // expected-error {{expected '{' after '\N' escape sequence}}
98 unsigned k = u'\N{LOTUS'; // expected-error {{incomplete universal character name}}
101 void separators(void) {
102 (void)"\x{12'3}"; // expected-error {{invalid digit ''' in escape sequence}}
103 (void)"\u{12'3}"; // expected-error {{invalid digit ''' in escape sequence}}
104 (void)"\o{12'3}"; // expected-error {{invalid digit ''' in escape sequence}}
106 '\x{12'3'}'; // expected-error {{expected '}'}}
107 // expected-error@-1 2{{expected ';'}}
108 // expected-warning@-2 3{{expression result unused}}
111 #if L'\N{GREEK CAPITAL LETTER GAMMA}' != L'Γ' // ext-warning {{extension}} cxx2b-warning {{C++2b}}
112 #error "oh no!"
113 #endif
115 #ifdef TRIGRAPHS
116 static_assert('\N??<DOLLAR SIGN??>' == '$'); // expected-warning 2{{trigraph converted}} \
117 // ext-warning {{extension}} cxx2b-warning {{C++2b}}
118 #endif