Commit c79e602b by Geoffrey Keating Committed by Geoffrey Keating

charset.c (_cpp_valid_ucn): In identifiers, reject a partial UCN rather than printing an error.

2005-03-15  Geoffrey Keating  <geoffk@apple.com>

	* 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  <geoffk@apple.com>

	* gcc.dg/cpp/ucnid-7.c: New.

From-SVN: r96546
parent 2532808d
2005-03-15 Geoffrey Keating <geoffk@apple.com>
* gcc.dg/cpp/ucnid-7.c: New.
2005-03-15 Janis Johnson <janis187@us.ibm.com>
Dorit Naishlos <dorit@il.ibm.com>
......
/* { dg-do compile } */
/* { dg-options "-std=c99" } */
#define a b(
#define b(x) q
int a\U0000000z );
2005-03-15 Geoffrey Keating <geoffk@apple.com>
* charset.c (_cpp_valid_ucn): In identifiers, reject a partial
UCN rather than printing an error.
2005-03-14 Geoffrey Keating <geoffk@apple.com>
* lex.c (forms_identifier_p): Disable UCNs in C89 mode.
......
......@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment