aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2021-06-08 17:48:49 -0400
committerJason Merrill <jason@redhat.com>2021-06-08 20:42:31 -0400
commit087253b9951766cbd93286b804ebb1ab59197aa8 (patch)
treef1c8f164f84197ece3884a4932f65821d6da55fb
parentc60387214593445d1514bf7852f27f4523458cda (diff)
downloadgcc-087253b9951766cbd93286b804ebb1ab59197aa8.zip
gcc-087253b9951766cbd93286b804ebb1ab59197aa8.tar.gz
gcc-087253b9951766cbd93286b804ebb1ab59197aa8.tar.bz2
c++: remove redundant warning [PR100879]
Before my r277864, build_new_op promoted enums to int before passing them on to cp_build_binary_op; after that commit, it doesn't, so warn_for_sign_compare sees the enum operands and gives a redundant warning. This warning dates back to 1995, and seems to have been dead code for a long time--likely since build_new_op was added in 1997--so let's just remove it. PR c++/100879 gcc/c-family/ChangeLog: * c-warn.c (warn_for_sign_compare): Remove C++ enum mismatch warning. gcc/testsuite/ChangeLog: * g++.dg/diagnostic/enum3.C: New test.
-rw-r--r--gcc/c-family/c-warn.c12
-rw-r--r--gcc/testsuite/g++.dg/diagnostic/enum3.C9
2 files changed, 9 insertions, 12 deletions
diff --git a/gcc/c-family/c-warn.c b/gcc/c-family/c-warn.c
index a587b99..cd3c99e 100644
--- a/gcc/c-family/c-warn.c
+++ b/gcc/c-family/c-warn.c
@@ -2240,18 +2240,6 @@ warn_for_sign_compare (location_t location,
int op1_signed = !TYPE_UNSIGNED (TREE_TYPE (orig_op1));
int unsignedp0, unsignedp1;
- /* In C++, check for comparison of different enum types. */
- if (c_dialect_cxx()
- && TREE_CODE (TREE_TYPE (orig_op0)) == ENUMERAL_TYPE
- && TREE_CODE (TREE_TYPE (orig_op1)) == ENUMERAL_TYPE
- && TYPE_MAIN_VARIANT (TREE_TYPE (orig_op0))
- != TYPE_MAIN_VARIANT (TREE_TYPE (orig_op1)))
- {
- warning_at (location,
- OPT_Wsign_compare, "comparison between types %qT and %qT",
- TREE_TYPE (orig_op0), TREE_TYPE (orig_op1));
- }
-
/* Do not warn if the comparison is being done in a signed type,
since the signed type will only be chosen if it can represent
all the values of the unsigned type. */
diff --git a/gcc/testsuite/g++.dg/diagnostic/enum3.C b/gcc/testsuite/g++.dg/diagnostic/enum3.C
new file mode 100644
index 0000000..d51aa8a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/diagnostic/enum3.C
@@ -0,0 +1,9 @@
+// PR c++/100879
+// { dg-additional-options -Werror=sign-compare }
+
+enum e1 { e1val };
+enum e2 { e3val };
+
+int main( int, char * [] ) {
+ if ( e1val == e3val ) return 1; // { dg-warning -Wenum-compare }
+}