aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog8
-rw-r--r--gcc/c-opts.c4
-rw-r--r--gcc/c.opt4
-rw-r--r--gcc/doc/cpp.texi18
-rw-r--r--gcc/doc/cppopts.texi6
-rw-r--r--gcc/testsuite/ChangeLog12
-rw-r--r--gcc/testsuite/g++.dg/cpp/normalize-1.C2
-rw-r--r--gcc/testsuite/g++.dg/cpp/ucnid-1.C2
-rw-r--r--gcc/testsuite/g++.dg/other/ucnid-1.C1
-rw-r--r--gcc/testsuite/gcc.dg/cpp/normalize-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/cpp/normalize-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/cpp/normalize-3.c2
-rw-r--r--gcc/testsuite/gcc.dg/cpp/normalize-4.c2
-rw-r--r--gcc/testsuite/gcc.dg/cpp/ucnid-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/cpp/ucnid-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/cpp/ucnid-3.c2
-rw-r--r--gcc/testsuite/gcc.dg/cpp/ucnid-4.c2
-rw-r--r--gcc/testsuite/gcc.dg/cpp/ucnid-5.c2
-rw-r--r--gcc/testsuite/gcc.dg/cpp/ucnid-7.c2
-rw-r--r--gcc/testsuite/gcc.dg/cpp/ucnid-8.c8
-rw-r--r--gcc/testsuite/gcc.dg/ucnid-1.c2
-rw-r--r--gcc/testsuite/gcc.dg/ucnid-2.c2
-rw-r--r--gcc/testsuite/gcc.dg/ucnid-3.c2
-rw-r--r--gcc/testsuite/gcc.dg/ucnid-4.c2
-rw-r--r--gcc/testsuite/gcc.dg/ucnid-5.c2
-rw-r--r--gcc/testsuite/gcc.dg/ucnid-6.c2
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. */
diff --git a/gcc/c.opt b/gcc/c.opt
index d650f11..eb01d32 100644
--- a/gcc/c.opt
+++ b/gcc/c.opt
@@ -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; }