Fix c++/27975.
authorMichael Matz <matz@suse.de>
Tue, 27 May 2008 14:59:53 +0000 (14:59 +0000)
committerMichael Matz <matz@gcc.gnu.org>
Tue, 27 May 2008 14:59:53 +0000 (14:59 +0000)
        * c.opt (Wenum-compare): New warning option.
        * doc/invoke.texi (Warning Options): Document -Wenum-compare.

cp/
        * call.c (build_new_op): Make warning conditional on OPT_Wenum_compare.

testsuite/
        * g++.dg/warn/Wenum-compare.C: New testcase.
        * g++.dg/warn/Wenum-compare-no.C: Ditto.

From-SVN: r136035

gcc/ChangeLog
gcc/c.opt
gcc/cp/ChangeLog
gcc/cp/call.c
gcc/doc/invoke.texi
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/warn/Wenum-compare-no.C [new file with mode: 0644]
gcc/testsuite/g++.dg/warn/Wenum-compare.C [new file with mode: 0644]

index 33ef156a46affe01255313ca4a42766a9dacdff6..60a0c8c2c9bd545e7f7dede1736a48a0639c4bc8 100644 (file)
@@ -1,3 +1,9 @@
+2008-05-27  Michael Matz  <matz@suse.de>
+
+       PR c++/27975
+       * c.opt (Wenum-compare): New warning option.
+       * doc/invoke.texi  (Warning Options): Document -Wenum-compare.
+
 2008-05-27  Michael Matz  <matz@suse.de>
 
        PR middle-end/36326
index 18ce852dc86a8c288cad130d12fa2d9cf0db9866..9669f2ca6ba36eb0d1e1b2c714aa18d010610c5f 100644 (file)
--- a/gcc/c.opt
+++ b/gcc/c.opt
@@ -195,6 +195,10 @@ Wendif-labels
 C ObjC C++ ObjC++ Warning
 Warn about stray tokens after #elif and #endif
 
+Wenum-compare
+C++ ObjC++ Var(warn_enum_compare) Init(1) Warning
+Warn about comparison of different enum types
+
 Werror
 C ObjC C++ ObjC++
 ; Documented in common.opt
index 3c54503608bd075062b012900f91a151d9cff26b..f371d8ca0c3a751ad5a206112e9ed4a8f5f5aae1 100644 (file)
@@ -1,3 +1,9 @@
+2008-05-27  Michael Matz  <matz@suse.de>
+
+       PR c++/27975
+       * call.c (build_new_op): Make warning conditional on
+       OPT_Wenum_compare.
+
 2008-05-27  Alexandre Oliva  <aoliva@redhat.com>
 
        PR c++/35909
index fe78f9cdf296ee78729406534f260b52dad9607c..0948c790c41e3d7cf11bc33f4547312d32055b84 100644 (file)
@@ -4004,7 +4004,8 @@ build_new_op (enum tree_code code, int flags, tree arg1, tree arg2, tree arg3,
                      != TYPE_MAIN_VARIANT (TREE_TYPE (arg2)))
                  && (complain & tf_warning))
                {
-                 warning (0, "comparison between %q#T and %q#T",
+                 warning (OPT_Wenum_compare,
+                          "comparison between %q#T and %q#T",
                           TREE_TYPE (arg1), TREE_TYPE (arg2));
                }
              break;
index e3678177a80ebf910e98d86b2efc5f517a2a7aa7..a2665f3c3b30ec030a623270aa2511ee4a33657a 100644 (file)
@@ -232,7 +232,7 @@ Objective-C and Objective-C++ Dialects}.
 -Wchar-subscripts -Wclobbered  -Wcomment @gol
 -Wconversion  -Wcoverage-mismatch  -Wno-deprecated  @gol
 -Wno-deprecated-declarations -Wdisabled-optimization  -Wno-div-by-zero  @gol
--Wempty-body  -Wno-endif-labels @gol
+-Wempty-body  -Wenum-compare -Wno-endif-labels @gol
 -Werror  -Werror=* @gol
 -Wfatal-errors  -Wfloat-equal  -Wformat  -Wformat=2 @gol
 -Wno-format-contains-nul -Wno-format-extra-args -Wformat-nonliteral @gol
@@ -3658,6 +3658,11 @@ while} statement.  Additionally, in C++, warn when an empty body occurs
 in a @samp{while} or @samp{for} statement with no whitespacing before
 the semicolon.  This warning is also enabled by @option{-Wextra}.
 
+@item -Wenum-compare @r{(C++ and Objective-C++ only)}
+@opindex Wenum-compare
+@opindex Wno-enum-compare
+Warn about a comparison between values of different enum types.
+
 @item -Wsign-compare
 @opindex Wsign-compare
 @opindex Wno-sign-compare
index 815ab8aca1081cab62d65dd97a43bd7a49a210fa..ec36b2c52f1ab43168094182d6b27dc4c97a0277 100644 (file)
@@ -1,3 +1,9 @@
+2008-05-27  Michael Matz  <matz@suse.de>
+
+       PR c++/27975
+       * g++.dg/warn/Wenum-compare.C: New testcase.
+       * g++.dg/warn/Wenum-compare-no.C: Ditto.
+
 2008-05-27  Richard Guenther  <rguenther@suse.de>
 
        PR tree-optimization/36339
diff --git a/gcc/testsuite/g++.dg/warn/Wenum-compare-no.C b/gcc/testsuite/g++.dg/warn/Wenum-compare-no.C
new file mode 100644 (file)
index 0000000..7dc27d3
--- /dev/null
@@ -0,0 +1,10 @@
+/* Test disabling -Wenum-compare (on by default).  See PR27975.  */
+/* { dg-do compile } */
+/* { dg-options "-Wno-enum-compare" } */
+enum E1 { a };
+enum E2 { b };
+
+int foo (E1 e1, E2 e2)
+{
+  return e1 == e2;  /* { dg-bogus "comparison between" } */
+}
diff --git a/gcc/testsuite/g++.dg/warn/Wenum-compare.C b/gcc/testsuite/g++.dg/warn/Wenum-compare.C
new file mode 100644 (file)
index 0000000..f600800
--- /dev/null
@@ -0,0 +1,10 @@
+/* Test that we get the -Wenum-compare by default.  See PR27975.  */
+/* { dg-do compile } */
+/* { dg-options "" } */
+enum E1 { a };
+enum E2 { b };
+
+int foo (E1 e1, E2 e2)
+{
+  return e1 == e2;  /* { dg-warning "comparison between" } */
+}