testsuite: 32 bit AIX 2 byte wchar
[official-gcc.git] / gcc / testsuite / g++.dg / cpp23 / wchar-multi1.C
blob0e3fb2f3726d64e34f493f7a144e2c1dc985c859
1 // P2362R3 - Remove non-encodable wide character literals and multicharacter
2 // wide character literals.
3 // { dg-do compile }
4 // { dg-require-effective-target 4byte_wchar_t }
6 char a = 'a';
7 int b = 'ab';                   // { dg-warning "multi-character character constant" }
8 int c = '\u05D9';               // { dg-error "character not encodable in a single execution character code unit" }
9 #if __SIZEOF_INT__ > 2
10 int d = '\U0001F525';           // { dg-error "character not encodable in a single execution character code unit" "" { target int32 } }
11 #endif
12 int e = 'abcd';                 // { dg-warning "multi-character character constant" "" { target int32plus } }
13                                 // { dg-warning "multi-character literal with \[0-9]+ characters exceeds 'int' size of \[0-9]+ bytes" "" { target { ! int32plus } } .-1 }
14 wchar_t f = L'f';
15 wchar_t g = L'gh';              // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++23 } }
16                                 // { dg-warning "multi-character literal cannot have an encoding prefix" "" { target c++20_down } .-1 }
17 wchar_t h = L'ijkl';            // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++23 } }
18                                 // { dg-warning "multi-character literal cannot have an encoding prefix" "" { target c++20_down } .-1 }
19 wchar_t i = L'\U0001F525';      // { dg-error "multi-character literal cannot have an encoding prefix" "" { target { c++23 && { ! 4byte_wchar_t } } } }
20                                 // { dg-warning "multi-character literal cannot have an encoding prefix" "" { target { c++20_down && { ! 4byte_wchar_t } } } .-1 }
21 #ifdef __cpp_char8_t
22 typedef char8_t u8;
23 #else
24 typedef char u8;
25 #endif
26 #if __cpp_unicode_characters >= 201411 
27 u8 j = u8'j';
28 u8 k = u8'kl';                  // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++17 } }
29 u8 l = u8'\U0001F525';          // { dg-error "character not encodable in a single code unit" "" { target c++17 }  }
30 #endif
31 #if __cpp_unicode_characters >= 200704
32 char16_t m = u'm';
33 char16_t n = u'no';             // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++11 } }
34 char16_t o = u'\u05D9';
35 char16_t p = u'\U0001F525';     // { dg-error "character not encodable in a single code unit" "" { target c++11 } }
36 char32_t q = U'm';
37 char32_t r = U'no';             // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++11 } }
38 char32_t s = U'\u05D9';
39 char32_t t = U'\U0001F525';
40 #endif
41 wchar_t u = L'\u0065\u0301';            // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++23 } }
42                                 // { dg-warning "multi-character literal cannot have an encoding prefix" "" { target c++20_down } .-1 }
43 wchar_t v = L'é';              // { dg-error "multi-character literal cannot have an encoding prefix" "" { target c++23 } }
44                                 // { dg-warning "multi-character literal cannot have an encoding prefix" "" { target c++20_down } .-1 }