diff options
Diffstat (limited to 'gcc')
26 files changed, 72 insertions, 25 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f19cfdb..4f55ac0 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2005-09-20 Joseph S. Myers <joseph@codesourcery.com> + + * c.opt (fextended-identifiers): New. + * c-opts.c (c_common_handle_option): Handle + -fextended-identifiers. + * doc/cpp.texi: Update documentation of extended identifiers. + * doc/cppopts.texi (-fextended-identifiers): Document. + 2005-09-20 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/23929 diff --git a/gcc/c-opts.c b/gcc/c-opts.c index e353119..b0efaf4 100644 --- a/gcc/c-opts.c +++ b/gcc/c-opts.c @@ -647,6 +647,10 @@ c_common_handle_option (size_t scode, const char *arg, int value) flag_enforce_eh_specs = value; break; + case OPT_fextended_identifiers: + cpp_opts->extended_identifiers = value; + break; + case OPT_ffixed_form: case OPT_ffixed_line_length_: /* Fortran front end options ignored when preprocessing only. */ @@ -495,6 +495,10 @@ fexec-charset= C ObjC C++ ObjC++ Joined RejectNegative -fexec-charset=<cset> Convert all strings and character constants to character set <cset> +fextended-identifiers +C ObjC C++ ObjC++ +Permit universal character names (\\u and \\U) in identifiers + finput-charset= C ObjC C++ ObjC++ Joined RejectNegative -finput-charset=<cset> Specify the default character set for source files diff --git a/gcc/doc/cpp.texi b/gcc/doc/cpp.texi index f5f29a6..c019adb 100644 --- a/gcc/doc/cpp.texi +++ b/gcc/doc/cpp.texi @@ -281,11 +281,11 @@ the character in the source character set that they represent, then converted to the execution character set, just like unescaped characters. +Unless the experimental @option{-fextended-identifiers} option is used, GCC does not permit the use of characters outside the ASCII range, nor -@samp{\u} and @samp{\U} escapes, in identifiers. We hope this will -change eventually, but there are problems with the standard semantics -of such ``extended identifiers'' which must be resolved through the -ISO C and C++ committees first. +@samp{\u} and @samp{\U} escapes, in identifiers. Even with that +option, characters outside the ASCII range can only be specified with +the @samp{\u} and @samp{\U} escapes, not used directly in identifiers. @node Initial processing @section Initial processing @@ -510,8 +510,10 @@ In the 1999 C standard, identifiers may contain letters which are not part of the ``basic source character set'', at the implementation's discretion (such as accented Latin letters, Greek letters, or Chinese ideograms). This may be done with an extended character set, or the -@samp{\u} and @samp{\U} escape sequences. GCC does not presently -implement either feature in the preprocessor or the compiler. +@samp{\u} and @samp{\U} escape sequences. The implementation of this +feature in GCC is experimental; such characters are only accepted in +the @samp{\u} and @samp{\U} forms and only if +@option{-fextended-identifiers} is used. As an extension, GCC treats @samp{$} as a letter. This is for compatibility with some systems, such as VMS, where @samp{$} is commonly @@ -3791,7 +3793,9 @@ character set may be controlled by the user, with the The C and C++ standards allow identifiers to be composed of @samp{_} and the alphanumeric characters. C++ and C99 also allow universal character names, and C99 further permits implementation-defined -characters. +characters. GCC currently only permits universal character names if +@option{-fextended-identifiers} is used, because the implementation of +universal character names in identifiers is experimental. GCC allows the @samp{$} character in identifiers as an extension for most targets. This is true regardless of the @option{std=} switch, diff --git a/gcc/doc/cppopts.texi b/gcc/doc/cppopts.texi index 2790e8c..adf77e1 100644 --- a/gcc/doc/cppopts.texi +++ b/gcc/doc/cppopts.texi @@ -511,6 +511,12 @@ Accept @samp{$} in identifiers. @xref{Identifier characters}. @end ifset +@item -fextended-identifiers +@opindex fextended-identifiers +Accept universal character names in identifiers. This option is +experimental; in a future version of GCC, it will be enabled by +default for C99 and C++. + @item -fpreprocessed @opindex fpreprocessed Indicate to the preprocessor that the input file has already been diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 382e26f..92e1977 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,15 @@ +2005-09-20 Joseph S. Myers <joseph@codesourcery.com> + + * g++.dg/cpp/ucnid-1.C, g++.dg/cpp/normalize-1.C, + g++.dg/other/ucnid-1.C, gcc.dg/cpp/normalize-1.c, + gcc.dg/cpp/normalize-2.c, gcc.dg/cpp/normalize-3.c, + gcc.dg/cpp/normalize-4.c, gcc.dg/cpp/ucnid-1.c, + gcc.dg/cpp/ucnid-2.c, gcc.dg/cpp/ucnid-3.c, gcc.dg/cpp/ucnid-4.c, + gcc.dg/cpp/ucnid-5.c, gcc.dg/cpp/ucnid-7.c,gcc.dg/ucnid-1.c, + gcc.dg/ucnid-2.c, gcc.dg/ucnid-3.c, gcc.dg/ucnid-4.c, + gcc.dg/ucnid-5.c, gcc.dg/ucnid-6.c: Add -fextended-identifiers. + * gcc.dg/cpp/ucnid-8.c: New test. + 2005-09-20 Jakub Jelinek <jakub@redhat.com> PR tree-optimization/23929 diff --git a/gcc/testsuite/g++.dg/cpp/normalize-1.C b/gcc/testsuite/g++.dg/cpp/normalize-1.C index 8c49602..536a3b4 100644 --- a/gcc/testsuite/g++.dg/cpp/normalize-1.C +++ b/gcc/testsuite/g++.dg/cpp/normalize-1.C @@ -1,5 +1,5 @@ /* { dg-do preprocess } */ -/* { dg-options "-Wnormalized=id" } */ +/* { dg-options "-fextended-identifiers -Wnormalized=id" } */ \u00AA \u00B7 diff --git a/gcc/testsuite/g++.dg/cpp/ucnid-1.C b/gcc/testsuite/g++.dg/cpp/ucnid-1.C index ccbb1ea..d15be4f 100644 --- a/gcc/testsuite/g++.dg/cpp/ucnid-1.C +++ b/gcc/testsuite/g++.dg/cpp/ucnid-1.C @@ -1,5 +1,5 @@ /* { dg-do preprocess } */ -/* { dg-options "-pedantic" } */ +/* { dg-options "-pedantic -fextended-identifiers" } */ \u00AA /* { dg-error "not valid in an identifier" } */ \u00AB /* { dg-error "not valid in an identifier" } */ diff --git a/gcc/testsuite/g++.dg/other/ucnid-1.C b/gcc/testsuite/g++.dg/other/ucnid-1.C index faba7b8..ff5696b 100644 --- a/gcc/testsuite/g++.dg/other/ucnid-1.C +++ b/gcc/testsuite/g++.dg/other/ucnid-1.C @@ -1,4 +1,5 @@ /* { dg-do run } */ +/* { dg-options "-fextended-identifiers" } */ /* { dg-xfail-if "" { "powerpc-ibm-aix*" } { "*" } { "" } } */ #include <cstdlib> diff --git a/gcc/testsuite/gcc.dg/cpp/normalize-1.c b/gcc/testsuite/gcc.dg/cpp/normalize-1.c index 768e193..b20f235 100644 --- a/gcc/testsuite/gcc.dg/cpp/normalize-1.c +++ b/gcc/testsuite/gcc.dg/cpp/normalize-1.c @@ -1,5 +1,5 @@ /* { dg-do preprocess } */ -/* { dg-options "-std=c99" } */ +/* { dg-options "-std=c99 -fextended-identifiers" } */ \u00AA \u00B7 diff --git a/gcc/testsuite/gcc.dg/cpp/normalize-2.c b/gcc/testsuite/gcc.dg/cpp/normalize-2.c index 28ef2f1..6f2f495 100644 --- a/gcc/testsuite/gcc.dg/cpp/normalize-2.c +++ b/gcc/testsuite/gcc.dg/cpp/normalize-2.c @@ -1,5 +1,5 @@ /* { dg-do preprocess } */ -/* { dg-options "-std=c99 -Wnormalized=nfkc" } */ +/* { dg-options "-std=c99 -fextended-identifiers -Wnormalized=nfkc" } */ \u00AA /* { dg-warning "not in NFKC" } */ \u00B7 diff --git a/gcc/testsuite/gcc.dg/cpp/normalize-3.c b/gcc/testsuite/gcc.dg/cpp/normalize-3.c index 0407492..a4f496f 100644 --- a/gcc/testsuite/gcc.dg/cpp/normalize-3.c +++ b/gcc/testsuite/gcc.dg/cpp/normalize-3.c @@ -1,5 +1,5 @@ /* { dg-do preprocess } */ -/* { dg-options "-std=c99 -Wnormalized=id" } */ +/* { dg-options "-std=c99 -fextended-identifiers -Wnormalized=id" } */ \u00AA \u00B7 diff --git a/gcc/testsuite/gcc.dg/cpp/normalize-4.c b/gcc/testsuite/gcc.dg/cpp/normalize-4.c index 1ee3ff5..0040c03 100644 --- a/gcc/testsuite/gcc.dg/cpp/normalize-4.c +++ b/gcc/testsuite/gcc.dg/cpp/normalize-4.c @@ -1,5 +1,5 @@ /* { dg-do preprocess } */ -/* { dg-options "-std=c99 -Wnormalized=none" } */ +/* { dg-options "-std=c99 -fextended-identifiers -Wnormalized=none" } */ \u00AA \u00B7 diff --git a/gcc/testsuite/gcc.dg/cpp/ucnid-1.c b/gcc/testsuite/gcc.dg/cpp/ucnid-1.c index bc516ca..3fad088 100644 --- a/gcc/testsuite/gcc.dg/cpp/ucnid-1.c +++ b/gcc/testsuite/gcc.dg/cpp/ucnid-1.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-std=c99" } */ +/* { dg-options "-std=c99 -fextended-identifiers" } */ void abort (void); #define \u00C0 1 diff --git a/gcc/testsuite/gcc.dg/cpp/ucnid-2.c b/gcc/testsuite/gcc.dg/cpp/ucnid-2.c index 616680a..6719c78 100644 --- a/gcc/testsuite/gcc.dg/cpp/ucnid-2.c +++ b/gcc/testsuite/gcc.dg/cpp/ucnid-2.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-std=c99" } */ +/* { dg-options "-std=c99 -fextended-identifiers" } */ #include <stdlib.h> #include <string.h> diff --git a/gcc/testsuite/gcc.dg/cpp/ucnid-3.c b/gcc/testsuite/gcc.dg/cpp/ucnid-3.c index a910037..6389b7e 100644 --- a/gcc/testsuite/gcc.dg/cpp/ucnid-3.c +++ b/gcc/testsuite/gcc.dg/cpp/ucnid-3.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-std=c99" } */ +/* { dg-options "-std=c99 -fextended-identifiers" } */ #define paste(x, y) x ## y diff --git a/gcc/testsuite/gcc.dg/cpp/ucnid-4.c b/gcc/testsuite/gcc.dg/cpp/ucnid-4.c index e41a3f5..6a6699b 100644 --- a/gcc/testsuite/gcc.dg/cpp/ucnid-4.c +++ b/gcc/testsuite/gcc.dg/cpp/ucnid-4.c @@ -1,5 +1,5 @@ /* { dg-do preprocess } */ -/* { dg-options "-std=c99" } */ +/* { dg-options "-std=c99 -fextended-identifiers" } */ \u00AA \u00AB /* { dg-error "not valid in an identifier" } */ diff --git a/gcc/testsuite/gcc.dg/cpp/ucnid-5.c b/gcc/testsuite/gcc.dg/cpp/ucnid-5.c index 8fcaeac..cdccd3c 100644 --- a/gcc/testsuite/gcc.dg/cpp/ucnid-5.c +++ b/gcc/testsuite/gcc.dg/cpp/ucnid-5.c @@ -1,5 +1,5 @@ /* { dg-do preprocess } */ -/* { dg-options "-std=c99 -pedantic" } */ +/* { dg-options "-std=c99 -pedantic -fextended-identifiers" } */ \u00AA \u00AB /* { dg-error "not valid in an identifier" } */ diff --git a/gcc/testsuite/gcc.dg/cpp/ucnid-7.c b/gcc/testsuite/gcc.dg/cpp/ucnid-7.c index 854c948..9340422 100644 --- a/gcc/testsuite/gcc.dg/cpp/ucnid-7.c +++ b/gcc/testsuite/gcc.dg/cpp/ucnid-7.c @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-std=c99" } */ +/* { dg-options "-std=c99 -fextended-identifiers" } */ #define a b( #define b(x) q int a\U0000000z ); diff --git a/gcc/testsuite/gcc.dg/cpp/ucnid-8.c b/gcc/testsuite/gcc.dg/cpp/ucnid-8.c new file mode 100644 index 0000000..1f0379a --- /dev/null +++ b/gcc/testsuite/gcc.dg/cpp/ucnid-8.c @@ -0,0 +1,8 @@ +/* { dg-do compile } */ +/* { dg-options "-std=c99" } */ +/* Test that -std=c99 does not enable extended identifiers while the + feature is experimental; remove this test after audit of all + identifier uses in the compiler. */ +#define a b( +#define b(x) q +int a\u00aa); diff --git a/gcc/testsuite/gcc.dg/ucnid-1.c b/gcc/testsuite/gcc.dg/ucnid-1.c index a8d49a3..ed89cfd 100644 --- a/gcc/testsuite/gcc.dg/ucnid-1.c +++ b/gcc/testsuite/gcc.dg/ucnid-1.c @@ -1,5 +1,5 @@ /* { dg-do run } */ -/* { dg-options "-std=c99" } */ +/* { dg-options "-std=c99 -fextended-identifiers" } */ void abort (void); int main (void) diff --git a/gcc/testsuite/gcc.dg/ucnid-2.c b/gcc/testsuite/gcc.dg/ucnid-2.c index 3b9973b..c7dd35b 100644 --- a/gcc/testsuite/gcc.dg/ucnid-2.c +++ b/gcc/testsuite/gcc.dg/ucnid-2.c @@ -1,6 +1,6 @@ /* { dg-do run } */ /* { dg-xfail-if "" { "powerpc-ibm-aix*" } { "*" } { "" } } */ -/* { dg-options "-std=c99" } */ +/* { dg-options "-std=c99 -fextended-identifiers" } */ void abort (void); static int \u00C0 = 1; diff --git a/gcc/testsuite/gcc.dg/ucnid-3.c b/gcc/testsuite/gcc.dg/ucnid-3.c index b68ffd4..79f1be8 100644 --- a/gcc/testsuite/gcc.dg/ucnid-3.c +++ b/gcc/testsuite/gcc.dg/ucnid-3.c @@ -1,6 +1,6 @@ /* { dg-do run } */ /* { dg-xfail-if "" { "powerpc-ibm-aix*" } { "*" } { "" } } */ -/* { dg-options "-std=c99" } */ +/* { dg-options "-std=c99 -fextended-identifiers" } */ void abort (void); int \u00C0 = 1; diff --git a/gcc/testsuite/gcc.dg/ucnid-4.c b/gcc/testsuite/gcc.dg/ucnid-4.c index 158b862..f9bf68e 100644 --- a/gcc/testsuite/gcc.dg/ucnid-4.c +++ b/gcc/testsuite/gcc.dg/ucnid-4.c @@ -1,6 +1,6 @@ /* { dg-do run */ /* { dg-xfail-if "" { "powerpc-ibm-aix*" } { "*" } { "" } } */ -/* { dg-options "-std=c99" } */ +/* { dg-options "-std=c99 -fextended-identifiers" } */ void abort (void); int \u00C0(void) { return 1; } diff --git a/gcc/testsuite/gcc.dg/ucnid-5.c b/gcc/testsuite/gcc.dg/ucnid-5.c index a77d514..8cd8606 100644 --- a/gcc/testsuite/gcc.dg/ucnid-5.c +++ b/gcc/testsuite/gcc.dg/ucnid-5.c @@ -1,6 +1,6 @@ /* { dg-do run } */ /* { dg-xfail-if "" { "powerpc-ibm-aix*" } { "*" } { "" } } */ -/* { dg-options "-std=c99 -fdollars-in-identifiers" } */ +/* { dg-options "-std=c99 -fdollars-in-identifiers -fextended-identifiers" } */ void abort (void); int a$b(void) { return 1; } diff --git a/gcc/testsuite/gcc.dg/ucnid-6.c b/gcc/testsuite/gcc.dg/ucnid-6.c index 7d2063b..37433a1 100644 --- a/gcc/testsuite/gcc.dg/ucnid-6.c +++ b/gcc/testsuite/gcc.dg/ucnid-6.c @@ -1,6 +1,6 @@ /* { dg-do run */ /* { dg-xfail-if "" { "powerpc-ibm-aix*" } { "*" } { "" } } */ -/* { dg-options "-std=c99 -save-temps" } */ +/* { dg-options "-std=c99 -fextended-identifiers -save-temps" } */ void abort (void); int \u00C0(void) { return 1; } |