aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2012-06-04 19:27:12 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2012-06-04 19:27:12 +0000
commit0e1dd874f84a29af7ee2fd8dd04766bc777035cf (patch)
tree7e8dc933f459f29ca33c70ed073b12da8be9ba66
parent7ca643e17ea01be20f1bfd91091ff658ff23bc3d (diff)
downloadgcc-0e1dd874f84a29af7ee2fd8dd04766bc777035cf.zip
gcc-0e1dd874f84a29af7ee2fd8dd04766bc777035cf.tar.gz
gcc-0e1dd874f84a29af7ee2fd8dd04766bc777035cf.tar.bz2
re PR c++/53524 (Bogus enum comparison warning)
2012-06-04 Paolo Carlini <paolo.carlini@oracle.com> PR c++/53524 * doc/invoke.texi (Wenum-compare): Update documentation. /cp 2012-06-04 Paolo Carlini <paolo.carlini@oracle.com> PR c++/53524 * call.c (build_conditional_expr_1): Use OPT_Wenum_compare to control enumeral mismatch in conditional expression too. /testsuite 2012-06-04 Paolo Carlini <paolo.carlini@oracle.com> PR c++/53524 * g++.dg/warn/Wenum-compare-no-2: New. From-SVN: r188204
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/call.c2
-rw-r--r--gcc/doc/invoke.texi7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/warn/Wenum-compare-no-2.C31
6 files changed, 52 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9448591..54db10a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2012-06-04 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/53524
+ * doc/invoke.texi (Wenum-compare): Update documentation.
+
2012-06-04 Dodji Seketeli <dodji@redhat.com>
PR preprocessor/53463
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 1a2f8e6..f473e2c 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2012-06-04 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/53524
+ * call.c (build_conditional_expr_1): Use OPT_Wenum_compare
+ to control enumeral mismatch in conditional expression too.
+
2012-06-04 Steven Bosscher <steven@gcc.gnu.org>
* semantics.c: Do not include output.h.
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index 6745afd..ad31f6a 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -4696,7 +4696,7 @@ build_conditional_expr_1 (tree arg1, tree arg2, tree arg3,
&& TREE_CODE (arg3_type) == ENUMERAL_TYPE)
{
if (complain & tf_warning)
- warning (0,
+ warning (OPT_Wenum_compare,
"enumeral mismatch in conditional expression: %qT vs %qT",
arg2_type, arg3_type);
}
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index d4f22e8..40c0838 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -4297,9 +4297,10 @@ while} statement. This warning is also enabled by @option{-Wextra}.
@item -Wenum-compare
@opindex Wenum-compare
@opindex Wno-enum-compare
-Warn about a comparison between values of different enumerated types. In C++
-this warning is enabled by default. In C this warning is enabled by
-@option{-Wall}.
+Warn about a comparison between values of different enumerated types.
+In C++ enumeral mismatches in conditional expressions are also
+diagnosed and the warning is enabled by default. In C this warning is
+enabled by @option{-Wall}.
@item -Wjump-misses-init @r{(C, Objective-C only)}
@opindex Wjump-misses-init
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 2d125fc..c2d2480 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2012-06-04 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/53524
+ * g++.dg/warn/Wenum-compare-no-2: New.
+
2012-06-04 Dodji Seketeli <dodji@redhat.com>
PR preprocessor/53463
diff --git a/gcc/testsuite/g++.dg/warn/Wenum-compare-no-2.C b/gcc/testsuite/g++.dg/warn/Wenum-compare-no-2.C
new file mode 100644
index 0000000..fa7dda8
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wenum-compare-no-2.C
@@ -0,0 +1,31 @@
+// PR c++/53524
+// { dg-options "-Wno-enum-compare" }
+
+template < typename > struct PointerLikeTypeTraits {
+ enum { NumLowBitsAvailable };
+};
+
+class CodeGenInstruction;
+class CodeGenInstAlias;
+
+template < typename T>
+struct PointerIntPair {
+ enum { IntShift = T::NumLowBitsAvailable };
+};
+
+template < typename PT1, typename PT2 > struct PointerUnionUIntTraits {
+ enum {
+ PT1BitsAv = PointerLikeTypeTraits < PT1 >::NumLowBitsAvailable,
+ PT2BitsAv = PointerLikeTypeTraits < PT2 >::NumLowBitsAvailable,
+ NumLowBitsAvailable = 0 ? PT1BitsAv : PT2BitsAv
+ };
+};
+
+template < typename PT1, typename PT2 > class PointerUnion {
+ typedef PointerIntPair < PointerUnionUIntTraits < PT1, PT2 > > ValTy;
+ ValTy Val;
+};
+
+struct ClassInfo {
+ PointerUnion < CodeGenInstruction *, CodeGenInstAlias * > DefRec;
+};