diff options
author | Tom Honermann <tom@honermann.net> | 2019-01-14 19:55:51 +0000 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2019-01-14 14:55:51 -0500 |
commit | 2d91f79dc990f81dcea89a5087cad566238b2456 (patch) | |
tree | ae9137b811a3a0bdada65dbb8a6ed5dba9d24b0e /gcc/testsuite/c-c++-common | |
parent | 23db6ced33c245c38c147c31011bbafa392e4328 (diff) | |
download | gcc-2d91f79dc990f81dcea89a5087cad566238b2456.zip gcc-2d91f79dc990f81dcea89a5087cad566238b2456.tar.gz gcc-2d91f79dc990f81dcea89a5087cad566238b2456.tar.bz2 |
Implement P0482R5, char8_t: A type for UTF-8 characters and strings
gcc/cp/
* cvt.c (type_promotes_to): Handle char8_t promotion.
* decl.c (grokdeclarator): Handle invalid type specifier
combinations involving char8_t.
* lex.c (init_reswords): Add char8_t as a reserved word.
* mangle.c (write_builtin_type): Add name mangling for char8_t (Du).
* parser.c (cp_keyword_starts_decl_specifier_p)
(cp_parser_simple_type_specifier): Recognize char8_t as a simple
type specifier.
(cp_parser_string_literal): Use char8_array_type_node for the type
of CPP_UTF8STRING.
(cp_parser_set_decl_spec_type): Tolerate char8_t typedefs in system
headers.
* rtti.c (emit_support_tinfos): type_info support for char8_t.
* tree.c (char_type_p): Recognize char8_t as a character type.
* typeck.c (string_conv_p): Handle conversions of u8 string
literals of char8_t type.
(check_literal_operator_args): Handle UDLs with u8 string literals
of char8_t type.
* typeck2.c (ordinary_char_type_p): New.
(digest_init_r): Disallow initializing a char array with a u8 string
literal.
gcc/c-family/
* c-common.c (c_common_reswords): Add char8_t.
(fix_string_type): Use char8_t for the type of u8 string literals.
(c_common_get_alias_set): char8_t doesn't alias.
(c_common_nodes_and_builtins): Define char8_t as a builtin type in
C++.
(c_stddef_cpp_builtins): Add __CHAR8_TYPE__.
(keyword_begins_type_specifier): Add RID_CHAR8.
* c-common.h (rid): Add RID_CHAR8.
(c_tree_index): Add CTI_CHAR8_TYPE and CTI_CHAR8_ARRAY_TYPE.
Define D_CXX_CHAR8_T and D_CXX_CHAR8_T_FLAGS.
Define char8_type_node and char8_array_type_node.
* c-cppbuiltin.c (cpp_atomic_builtins): Predefine
__GCC_ATOMIC_CHAR8_T_LOCK_FREE.
(c_cpp_builtins): Predefine __cpp_char8_t.
* c-lex.c (lex_string): Use char8_array_type_node as the type of
CPP_UTF8STRING.
(lex_charconst): Use char8_type_node as the type of CPP_UTF8CHAR.
* c-opts.c: If not otherwise specified, enable -fchar8_t when
targeting C++2a.
* c.opt: Add the -fchar8_t command line option.
libiberty/
* cp-demangle.c (cplus_demangle_builtin_types)
(cplus_demangle_type): Add name demangling for char8_t (Du).
* cp-demangle.h: Increase D_BUILTIN_TYPE_COUNT to accommodate the
new char8_t type.
From-SVN: r267923
Diffstat (limited to 'gcc/testsuite/c-c++-common')
-rw-r--r-- | gcc/testsuite/c-c++-common/raw-string-13.c | 60 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/raw-string-15.c | 60 |
2 files changed, 120 insertions, 0 deletions
diff --git a/gcc/testsuite/c-c++-common/raw-string-13.c b/gcc/testsuite/c-c++-common/raw-string-13.c index 1b37405..fa11eda 100644 --- a/gcc/testsuite/c-c++-common/raw-string-13.c +++ b/gcc/testsuite/c-c++-common/raw-string-13.c @@ -62,6 +62,47 @@ const char s16[] = R"??(??)??"; const char s17[] = R"?(?)??)?"; const char s18[] = R"??(??)??)??)??"; +const char u800[] = u8R"??=??(??<??>??)??'??!??-\ +(a)#[{}]^|~"; +)??=??"; +const char u801[] = u8R"a( +)\ +a" +)a"; +const char u802[] = u8R"a( +)a\ +" +)a"; +const char u803[] = u8R"ab( +)a\ +b" +)ab"; +const char u804[] = u8R"a??/(x)a??/"; +const char u805[] = u8R"abcdefghijklmn??(abc)abcdefghijklmn??"; +const char u806[] = u8R"abcdefghijklm??/(abc)abcdefghijklm??/"; +const char u807[] = u8R"abc(??)\ +abc";)abc"; +const char u808[] = u8R"def(de)\ +def";)def"; +const char u809[] = u8R"a(??)\ +a" +)a"; +const char u810[] = u8R"a(??)a\ +" +)a"; +const char u811[] = u8R"ab(??)a\ +b" +)ab"; +const char u812[] = u8R"a#(a#)a??=)a#"; +const char u813[] = u8R"a#(??)a??=??)a#"; +const char u814[] = u8R"??/(x)??/ +";)??/"; +const char u815[] = u8R"??/(??)??/ +";)??/"; +const char u816[] = u8R"??(??)??"; +const char u817[] = u8R"?(?)??)?"; +const char u818[] = u8R"??(??)??)??)??"; + const char16_t u00[] = uR"??=??(??<??>??)??'??!??-\ (a)#[{}]^|~"; )??=??"; @@ -211,6 +252,25 @@ main (void) TEST (s16, "??"); TEST (s17, "?)??"); TEST (s18, "??"")??"")??"); + TEST (u800, u8"??""<??"">??"")??""'??""!??""-\\\n(a)#[{}]^|~\";\n"); + TEST (u801, u8"\n)\\\na\"\n"); + TEST (u802, u8"\n)a\\\n\"\n"); + TEST (u803, u8"\n)a\\\nb\"\n"); + TEST (u804, u8"x"); + TEST (u805, u8"abc"); + TEST (u806, u8"abc"); + TEST (u807, u8"??"")\\\nabc\";"); + TEST (u808, u8"de)\\\ndef\";"); + TEST (u809, u8"??"")\\\na\"\n"); + TEST (u810, u8"??"")a\\\n\"\n"); + TEST (u811, u8"??"")a\\\nb\"\n"); + TEST (u812, u8"a#)a??""="); + TEST (u813, u8"??"")a??""=??"); + TEST (u814, u8"x)??""/\n\";"); + TEST (u815, u8"??"")??""/\n\";"); + TEST (u816, u8"??"); + TEST (u817, u8"?)??"); + TEST (u818, u8"??"")??"")??"); TEST (u00, u"??""<??"">??"")??""'??""!??""-\\\n(a)#[{}]^|~\";\n"); TEST (u01, u"\n)\\\na\"\n"); TEST (u02, u"\n)a\\\n\"\n"); diff --git a/gcc/testsuite/c-c++-common/raw-string-15.c b/gcc/testsuite/c-c++-common/raw-string-15.c index 9dfdaab..1d101dc8 100644 --- a/gcc/testsuite/c-c++-common/raw-string-15.c +++ b/gcc/testsuite/c-c++-common/raw-string-15.c @@ -62,6 +62,47 @@ const char s16[] = R"??(??)??"; const char s17[] = R"?(?)??)?"; const char s18[] = R"??(??)??)??)??"; +const char u800[] = u8R"??=??(??<??>??)??'??!??-\ +(a)#[{}]^|~"; +)??=??"; +const char u801[] = u8R"a( +)\ +a" +)a"; +const char u802[] = u8R"a( +)a\ +" +)a"; +const char u803[] = u8R"ab( +)a\ +b" +)ab"; +const char u804[] = u8R"a??/(x)a??/"; +const char u805[] = u8R"abcdefghijklmn??(abc)abcdefghijklmn??"; +const char u806[] = u8R"abcdefghijklm??/(abc)abcdefghijklm??/"; +const char u807[] = u8R"abc(??)\ +abc";)abc"; +const char u808[] = u8R"def(de)\ +def";)def"; +const char u809[] = u8R"a(??)\ +a" +)a"; +const char u810[] = u8R"a(??)a\ +" +)a"; +const char u811[] = u8R"ab(??)a\ +b" +)ab"; +const char u812[] = u8R"a#(a#)a??=)a#"; +const char u813[] = u8R"a#(??)a??=??)a#"; +const char u814[] = u8R"??/(x)??/ +";)??/"; +const char u815[] = u8R"??/(??)??/ +";)??/"; +const char u816[] = u8R"??(??)??"; +const char u817[] = u8R"?(?)??)?"; +const char u818[] = u8R"??(??)??)??)??"; + const char16_t u00[] = uR"??=??(??<??>??)??'??!??-\ (a)#[{}]^|~"; )??=??"; @@ -211,6 +252,25 @@ main (void) TEST (s16, "??"); TEST (s17, "?)??"); TEST (s18, "??"")??"")??"); + TEST (u800, u8"??""<??"">??"")??""'??""!??""-\\\n(a)#[{}]^|~\";\n"); + TEST (u801, u8"\n)\\\na\"\n"); + TEST (u802, u8"\n)a\\\n\"\n"); + TEST (u803, u8"\n)a\\\nb\"\n"); + TEST (u804, u8"x"); + TEST (u805, u8"abc"); + TEST (u806, u8"abc"); + TEST (u807, u8"??"")\\\nabc\";"); + TEST (u808, u8"de)\\\ndef\";"); + TEST (u809, u8"??"")\\\na\"\n"); + TEST (u810, u8"??"")a\\\n\"\n"); + TEST (u811, u8"??"")a\\\nb\"\n"); + TEST (u812, u8"a#)a??""="); + TEST (u813, u8"??"")a??""=??"); + TEST (u814, u8"x)??""/\n\";"); + TEST (u815, u8"??"")??""/\n\";"); + TEST (u816, u8"??"); + TEST (u817, u8"?)??"); + TEST (u818, u8"??"")??"")??"); TEST (u00, u"??""<??"">??"")??""'??""!??""-\\\n(a)#[{}]^|~\";\n"); TEST (u01, u"\n)\\\na\"\n"); TEST (u02, u"\n)a\\\n\"\n"); |