This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

C++: Supporting operator names


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

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]