diff options
author | Geoffrey Keating <geoffk@apple.com> | 2005-03-16 00:59:31 +0000 |
---|---|---|
committer | Geoffrey Keating <geoffk@gcc.gnu.org> | 2005-03-16 00:59:31 +0000 |
commit | c79e602b6302889036c04a7ca530afc5ae97e053 (patch) | |
tree | 62dc23023bb72619d67f7423a9526121e5f67962 | |
parent | 2532808d17ab69f24bb50e9daf6c27e20d90f352 (diff) | |
download | gcc-c79e602b6302889036c04a7ca530afc5ae97e053.zip gcc-c79e602b6302889036c04a7ca530afc5ae97e053.tar.gz gcc-c79e602b6302889036c04a7ca530afc5ae97e053.tar.bz2 |
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
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/cpp/ucnid-7.c | 5 | ||||
-rw-r--r-- | libcpp/ChangeLog | 5 | ||||
-rw-r--r-- | libcpp/charset.c | 12 |
4 files changed, 22 insertions, 4 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fd4e902..9f4d667 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +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> diff --git a/gcc/testsuite/gcc.dg/cpp/ucnid-7.c b/gcc/testsuite/gcc.dg/cpp/ucnid-7.c new file mode 100644 index 0000000..854c948 --- /dev/null +++ b/gcc/testsuite/gcc.dg/cpp/ucnid-7.c @@ -0,0 +1,5 @@ +/* { dg-do compile } */ +/* { dg-options "-std=c99" } */ +#define a b( +#define b(x) q +int a\U0000000z ); diff --git a/libcpp/ChangeLog b/libcpp/ChangeLog index 043acee..e5ecf6d 100644 --- a/libcpp/ChangeLog +++ b/libcpp/ChangeLog @@ -1,3 +1,8 @@ +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. 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); |