charset.c (cpp_init_iconv): Initialize utf8_cset_desc.
* charset.c (cpp_init_iconv): Initialize utf8_cset_desc. (_cpp_destroy_iconv): Destroy utf8_cset_desc, char16_cset_desc and char32_cset_desc. (converter_for_type): Handle CPP_UTF8STRING. (cpp_interpret_string): Handle CPP_UTF8STRING and raw-strings. * directives.c (get__Pragma_string): Handle CPP_UTF8STRING. (parse_include): Reject raw strings. * include/cpplib.h (CPP_UTF8STRING): New token type. * internal.h (struct cpp_reader): Add utf8_cset_desc field. * lex.c (lex_raw_string): New function. (lex_string): Handle u8 string literals, call lex_raw_string for raw string literals. (_cpp_lex_direct): Call lex_string even for u8" and {,u,U,L,u8}R" sequences. * macro.c (stringify_arg): Handle CPP_UTF8STRING. * c-common.c (c_parse_error): Handle CPP_UTF8STRING. * c-lex.c (c_lex_with_flags): Likewise. Test C_LEX_STRING_NO_JOIN instead of C_LEX_RAW_STRINGS. (lex_string): Handle CPP_UTF8STRING. * c-parser.c (c_parser_postfix_expression): Likewise. * c-pragma.h (C_LEX_RAW_STRINGS): Rename to ... (C_LEX_STRING_NO_JOIN): ... this. * parser.c (cp_lexer_print_token, cp_parser_is_string_literal, cp_parser_string_literal, cp_parser_primary_expression): Likewise. (cp_lexer_get_preprocessor_token): Use C_LEX_STRING_JOIN instead of C_LEX_RAW_STRINGS. * gcc.dg/raw-string-1.c: New test. * gcc.dg/raw-string-2.c: New test. * gcc.dg/raw-string-3.c: New test. * gcc.dg/raw-string-4.c: New test. * gcc.dg/raw-string-5.c: New test. * gcc.dg/raw-string-6.c: New test. * gcc.dg/raw-string-7.c: New test. * gcc.dg/utf8-1.c: New test. * gcc.dg/utf8-2.c: New test. * gcc.dg/utf-badconcat2.c: New test. * gcc.dg/utf-dflt2.c: New test. * gcc.dg/cpp/include6.c: New test. * g++.dg/ext/raw-string-1.C: New test. * g++.dg/ext/raw-string-2.C: New test. * g++.dg/ext/raw-string-3.C: New test. * g++.dg/ext/raw-string-4.C: New test. * g++.dg/ext/raw-string-5.C: New test. * g++.dg/ext/raw-string-6.C: New test. * g++.dg/ext/raw-string-7.C: New test. * g++.dg/ext/utf8-1.C: New test. * g++.dg/ext/utf8-2.C: New test. * g++.dg/ext/utf-badconcat2.C: New test. * g++.dg/ext/utf-dflt2.C: New test. From-SVN: r152995
This commit is contained in:
parent
4d696ad011
commit
2c6e3f5540
38 changed files with 1244 additions and 28 deletions
|
@ -697,7 +697,8 @@ parse_include (cpp_reader *pfile, int *pangle_brackets,
|
|||
/* Allow macro expansion. */
|
||||
header = get_token_no_padding (pfile);
|
||||
*location = header->src_loc;
|
||||
if (header->type == CPP_STRING || header->type == CPP_HEADER_NAME)
|
||||
if ((header->type == CPP_STRING && header->val.str.text[0] != 'R')
|
||||
|| header->type == CPP_HEADER_NAME)
|
||||
{
|
||||
fname = XNEWVEC (char, header->val.str.len - 1);
|
||||
memcpy (fname, header->val.str.text + 1, header->val.str.len - 2);
|
||||
|
@ -1537,7 +1538,8 @@ get__Pragma_string (cpp_reader *pfile)
|
|||
if (string->type == CPP_EOF)
|
||||
_cpp_backup_tokens (pfile, 1);
|
||||
if (string->type != CPP_STRING && string->type != CPP_WSTRING
|
||||
&& string->type != CPP_STRING32 && string->type != CPP_STRING16)
|
||||
&& string->type != CPP_STRING32 && string->type != CPP_STRING16
|
||||
&& string->type != CPP_UTF8STRING)
|
||||
return NULL;
|
||||
|
||||
paren = get_token_no_padding (pfile);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue