From a32990968ed7264a23f0546123a1384f6a0e4db5 Mon Sep 17 00:00:00 2001 From: Michael Matz Date: Tue, 27 May 2008 14:59:53 +0000 Subject: Fix c++/27975. * 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 | 6 ++++++ gcc/c.opt | 4 ++++ gcc/cp/ChangeLog | 6 ++++++ gcc/cp/call.c | 3 ++- gcc/doc/invoke.texi | 7 ++++++- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/g++.dg/warn/Wenum-compare-no.C | 10 ++++++++++ gcc/testsuite/g++.dg/warn/Wenum-compare.C | 10 ++++++++++ 8 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/warn/Wenum-compare-no.C create mode 100644 gcc/testsuite/g++.dg/warn/Wenum-compare.C (limited to 'gcc') diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 33ef156..60a0c8c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2008-05-27 Michael Matz + PR c++/27975 + * c.opt (Wenum-compare): New warning option. + * doc/invoke.texi (Warning Options): Document -Wenum-compare. + +2008-05-27 Michael Matz + PR middle-end/36326 * tree-gimple.c (is_gimple_mem_rhs): Remove work-around for non-BLKmode types. diff --git a/gcc/c.opt b/gcc/c.opt index 18ce852..9669f2c 100644 --- 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 diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3c54503..f371d8c 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2008-05-27 Michael Matz + + PR c++/27975 + * call.c (build_new_op): Make warning conditional on + OPT_Wenum_compare. + 2008-05-27 Alexandre Oliva PR c++/35909 diff --git a/gcc/cp/call.c b/gcc/cp/call.c index fe78f9c..0948c79 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -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; diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi index e367817..a2665f3 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi @@ -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 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 815ab8a..ec36b2c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2008-05-27 Michael Matz + + PR c++/27975 + * g++.dg/warn/Wenum-compare.C: New testcase. + * g++.dg/warn/Wenum-compare-no.C: Ditto. + 2008-05-27 Richard Guenther 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 index 0000000..7dc27d3 --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wenum-compare-no.C @@ -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 index 0000000..f6008003 --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wenum-compare.C @@ -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" } */ +} -- cgit v1.1