This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug preprocessor/9449] UCNs not recognized in identifiers (c++/c99)
- From: "joseph at codesourcery dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 22 Feb 2005 02:22:49 -0000
- Subject: [Bug preprocessor/9449] UCNs not recognized in identifiers (c++/c99)
- References: <20030127145600.9449.rearnsha@arm.com>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Additional Comments From joseph at codesourcery dot com 2005-02-22 02:22 -------
Subject: Re: UCNs not recognized in identifiers
(c++/c99)
On Mon, 21 Feb 2005, neil at daikokuya dot co dot uk wrote:
> jsm28 at gcc dot gnu dot org wrote:-
>
> > * The greedy algorithm applies for lexing UCNs: for example,
> > a\U0000000z is three preprocessing tokens {a}{\}{U0000000z} (and
> > shouldn't get a diagnostic on lexing, presuming macros are defined
> > such that the eventual token sequence is valid).
>
> I'm not sure I agree with this: it would seem to be unnecessary
> extra work; further I suspect the user would benefit from it being
> pointed out he entered an ill-formed UCN rather than something random
> from the front end complaining about an unexpected backslash.
>
> The only case where you wouldn't get a syntax error from the
> front end, or an invalid escape in a literal, is with -E. I'm
> not sure lexing to the letter of the standard is worthwhile in
> this case, as the standard doesn't discuss -E.
>
> If you have an example where a compiled program is acceptable
> with multiple lexing tokens then I would agree with you.
#define a b(
#define b(x) q
int a\U0000000z );
Greedy lexing is the standard as applied for other token types. I don't
think a difference here makes sense. _cpp_valid_ucn would need changing
so it doesn't give an error for incomplete UCNs in identifiers but instead
returns quietly.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=9449