This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
C++: Supporting operator names
- To: gcc-patches at gcc dot gnu dot org
- Subject: C++: Supporting operator names
- From: "Martin v. Loewis" <martin at loewis dot home dot cs dot tu-berlin dot de>
- Date: Mon, 10 Apr 2000 09:20:35 +0200
This patch activates the -foperator-names flag by default, and removes
it from the set of flags activated by -ansi.
There is comment in lex.c saying
/* These are new ANSI keywords that may break code. */
UNSET_RESERVED_WORD ("and");
UNSET_RESERVED_WORD ("and_eq");
UNSET_RESERVED_WORD ("bitand");
UNSET_RESERVED_WORD ("bitor");
UNSET_RESERVED_WORD ("compl");
UNSET_RESERVED_WORD ("not");
UNSET_RESERVED_WORD ("not_eq");
UNSET_RESERVED_WORD ("or");
UNSET_RESERVED_WORD ("or_eq");
UNSET_RESERVED_WORD ("xor");
UNSET_RESERVED_WORD ("xor_eq");
I think the comment is mostly incorrect, and the effect is not that
serious. I doubt that system headers on the relevant platforms use the
keywords for anything else (on Linux and Solaris, they are not used),
because it would have conflicted with <iso646.h>. It may cause
problems on application C headers, just like 'class' in those headers
may cause problems. People running into problems still can use
-fno-operator-names.
Enabling it in the gcc mainline allows us to better understand
problems it may cause.
Regards,
Martin
2000-04-10 Martin v. Löwis <loewis@informatik.hu-berlin.de>
* invoke.texi (-ansi): Remove -foperator-names from list of
implied options. Do not call it ANSI C++.
(-foperator-names): Document as -fno-operator-names.
* cp/decl2.c (flag_operator_names): Default to 1.
(lang_decode_option): Do not set it for -ansi.
Index: invoke.texi
===================================================================
RCS file: /cvs/gcc/egcs/gcc/invoke.texi,v
retrieving revision 1.181
diff -u -p -r1.181 invoke.texi
--- invoke.texi 2000/03/29 13:10:41 1.181
+++ invoke.texi 2000/04/10 06:30:25
@@ -103,17 +103,17 @@
@item C++ Language Options
@xref{C++ Dialect Options,,Options Controlling C++ Dialect}.
@smallexample
--fno-access-control -fcheck-new -fconserve-space -fdollars-in-identifiers
--fno-elide-constructors -fexternal-templates -ffor-scope
--fno-for-scope -fno-gnu-keywords -fguiding-decls
--fhonor-std -fhuge-objects -fno-implicit-templates -finit-priority
--fno-implement-inlines -fname-mangling-version-@var{n} -fno-default-inline
--foperator-names -fno-optional-diags -fpermissive -frepo -fstrict-prototype
--fsquangle -ftemplate-depth-@var{n} -fuse-cxa-atexit -fvtable-thunks
--nostdinc++ -Wctor-dtor-privacy -Wno-deprecated -Weffc++
--Wno-non-template-friend
--Wnon-virtual-dtor -Wold-style-cast -Woverloaded-virtual
--Wno-pmf-conversions -Wreorder -Wsign-promo -Wsynth
+-fno-access-control -fcheck-new -fconserve-space
+-fdollars-in-identifiers -fno-elide-constructors -fexternal-templates
+-ffor-scope -fno-for-scope -fno-gnu-keywords -fguiding-decls -fhonor-std
+-fhuge-objects -fno-implicit-templates -finit-priority
+-fno-implement-inlines -fname-mangling-version-@var{n}
+-fno-default-inline -fno-operator-names -fno-optional-diags -fpermissive
+-frepo -fstrict-prototype -fsquangle -ftemplate-depth-@var{n}
+-fuse-cxa-atexit -fvtable-thunks -nostdinc++ -Wctor-dtor-privacy
+-Wno-deprecated -Weffc++ -Wno-non-template-friend -Wnon-virtual-dtor
+-Wold-style-cast -Woverloaded-virtual -Wno-pmf-conversions -Wreorder
+-Wsign-promo -Wsynth
@end smallexample
@item Warning Options
@@ -672,20 +672,18 @@ from C, such as C++ and Objective C) tha
@cindex ANSI support
@item -ansi
In C mode, support all ANSI standard C programs. In C++ mode,
-remove GNU extensions that conflict with ANSI C++.
+remove GNU extensions that conflict with ISO C++.
@c shouldn't we be saying "ISO"?
This turns off certain features of GCC that are incompatible with ANSI
-C (when compiling C code), or of ANSI standard C++ (when compiling C++ code),
+C (when compiling C code), or of standard C++ (when compiling C++ code),
such as the @code{asm} and @code{typeof} keywords, and
predefined macros such as @code{unix} and @code{vax} that identify the
type of system you are using. It also enables the undesirable and
rarely used ANSI trigraph feature. For the C compiler,
it disables recognition of C++ style @samp{//} comments as well as
-the @code{inline} keyword. For the C++ compiler,
-@samp{-foperator-names} is enabled as well.
+the @code{inline} keyword.
-
The alternate keywords @code{__asm__}, @code{__extension__},
@code{__inline__} and @code{__typeof__} continue to work despite
@samp{-ansi}. You would not want to use them in an ANSI C program, of
@@ -1182,11 +1178,10 @@ template <class T, class U> void foo(T t
Like all options that change the ABI, all C++ code, @emph{including
libgcc} must be built with the same setting of this option.
-@item -foperator-names
-Recognize the operator name keywords @code{and}, @code{bitand},
+@item -fno-operator-names
+Do not treat the operator name keywords @code{and}, @code{bitand},
@code{bitor}, @code{compl}, @code{not}, @code{or} and @code{xor} as
-synonyms for the symbols they refer to. @samp{-ansi} implies
-@samp{-foperator-names}.
+synonyms as keywords.
@item -fno-optional-diags
Disable diagnostics that the standard says a compiler does not need to
Index: cp/decl2.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/cp/decl2.c,v
retrieving revision 1.327
diff -u -p -r1.327 decl2.c
--- decl2.c 2000/04/06 16:30:44 1.327
+++ decl2.c 2000/04/10 06:30:32
@@ -419,7 +419,7 @@ int flag_access_control = 1;
/* Nonzero if we want to understand the operator names, i.e. 'bitand'. */
-int flag_operator_names;
+int flag_operator_names = 1;
/* Nonzero if we want to check the return value of new and avoid calling
constructors if it is a null pointer. */
@@ -789,7 +789,7 @@ lang_decode_option (argc, argv)
}
else if (!strcmp (p, "-ansi"))
flag_no_nonansi_builtin = 1, flag_ansi = 1,
- flag_no_gnu_keywords = 1, flag_operator_names = 1;
+ flag_no_gnu_keywords = 1;
#ifdef SPEW_DEBUG
/* Undocumented, only ever used when you're invoking cc1plus by hand, since
it's probably safe to assume no sane person would ever want to use this