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
This commit is contained in:
Paolo Carlini 2012-06-04 19:27:12 +00:00 committed by Paolo Carlini
parent 7ca643e17e
commit 0e1dd874f8
6 changed files with 52 additions and 4 deletions

View File

@ -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

View File

@ -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.

View File

@ -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);
}

View File

@ -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

View File

@ -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

View File

@ -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;
};