From c79e602b6302889036c04a7ca530afc5ae97e053 Mon Sep 17 00:00:00 2001 From: Geoffrey Keating Date: Wed, 16 Mar 2005 00:59:31 +0000 Subject: charset.c (_cpp_valid_ucn): In identifiers, reject a partial UCN rather than printing an error. 2005-03-15 Geoffrey Keating * charset.c (_cpp_valid_ucn): In identifiers, reject a partial UCN rather than printing an error. Index: gcc/testsuite/ChangeLog 2005-03-15 Geoffrey Keating * gcc.dg/cpp/ucnid-7.c: New. From-SVN: r96546 --- libcpp/charset.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'libcpp/charset.c') diff --git a/libcpp/charset.c b/libcpp/charset.c index f028b37..ba53f63 100644 --- a/libcpp/charset.c +++ b/libcpp/charset.c @@ -923,9 +923,8 @@ ucn_valid_in_identifier (cpp_reader *pfile, cppchar_t c, program is ill-formed. *PSTR must be preceded by "\u" or "\U"; it is assumed that the - buffer end is delimited by a non-hex digit. Returns zero if UCNs - are not part of the relevant standard, or if the string beginning - at *PSTR doesn't syntactically match the form 'NNNN' or 'NNNNNNNN'. + buffer end is delimited by a non-hex digit. Returns zero if the + UCN has not been consumed. Otherwise the nonzero value of the UCN, whether valid or invalid, is returned. Diagnostics are emitted for invalid values. PSTR @@ -974,10 +973,15 @@ _cpp_valid_ucn (cpp_reader *pfile, const uchar **pstr, } while (--length && str < limit); + /* Partial UCNs are not valid in strings, but decompose into + multiple tokens in identifiers, so we can't give a helpful + error message in that case. */ + if (length && identifier_pos) + return 0; + *pstr = str; if (length) { - /* We'll error when we try it out as the start of an identifier. */ cpp_error (pfile, CPP_DL_ERROR, "incomplete universal character name %.*s", (int) (str - base), base); -- cgit v1.1