xref: /llvm-project/clang/test/Lexer/char8_t.cpp (revision 20df6038ee76f110640fc7c5fa9b96b84e373932)
1*20df6038SRichard Smith // RUN: %clang_cc1 -std=c++20 -verify %s -DCHAR8_T
2*20df6038SRichard Smith // RUN: %clang_cc1 -std=c++20 -verify %s -fchar8_t -DCHAR8_T
3*20df6038SRichard Smith // RUN: %clang_cc1 -std=c++17 -verify %s -fchar8_t -DCHAR8_T
4*20df6038SRichard Smith 
5*20df6038SRichard Smith // RUN: %clang_cc1 -std=c++17 -verify %s
6*20df6038SRichard Smith // RUN: %clang_cc1 -std=c++17 -verify %s -fno-char8_t
7*20df6038SRichard Smith // RUN: %clang_cc1 -std=c++20 -verify %s -fno-char8_t
8*20df6038SRichard Smith 
9*20df6038SRichard Smith #if defined(__cpp_char8_t) != defined(CHAR8_T)
10*20df6038SRichard Smith #error wrong setting for __cpp_char_t
11*20df6038SRichard Smith #endif
123a8244dfSRichard Smith 
133a8244dfSRichard Smith #if defined(__cpp_char8_t) && __is_identifier(char8_t)
143a8244dfSRichard Smith #error char8_t is an identifier under -fchar8_t
153a8244dfSRichard Smith #endif
163a8244dfSRichard Smith 
173a8244dfSRichard Smith #if !defined(__cpp_char8_t) && !__is_identifier(char8_t)
183a8244dfSRichard Smith #error char8_t is a keyword under -fno-char8_t
193a8244dfSRichard Smith #endif
203a8244dfSRichard Smith 
213a8244dfSRichard Smith char8_t c8t;
223a8244dfSRichard Smith #ifndef __cpp_char8_t
233a8244dfSRichard Smith // expected-error@-2 {{unknown type}}
243a8244dfSRichard Smith #else
253a8244dfSRichard Smith // expected-no-diagnostics
263a8244dfSRichard Smith #endif
27