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: r188207
This commit is contained in:
Paolo Carlini 2012-06-04 20:30:59 +00:00 committed by Paolo Carlini
parent 60f854df86
commit a26669749c
6 changed files with 54 additions and 6 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 Edmar Wienskoski <edmar@freescale.com>
PR target/53559
@ -23,7 +28,7 @@
Backport from mainline
2012-04-25 Jakub Jelinek <jakub@redhat.com>
PR middle-end/52979
* stor-layout.c (get_best_mode): Don't return mode with bitsize
larger than maxbits. Don't compute maxbits modulo align.

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-01 Jason Merrill <jason@redhat.com>
PR c++/52973

View File

@ -4630,7 +4630,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

@ -4213,9 +4213,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 Edmar Wienskoski <edmar@freescale.com>
PR target/53559
@ -14,7 +19,7 @@
Backport from mainline
2012-04-25 Jakub Jelinek <jakub@redhat.com>
PR middle-end/52979
* gcc.c-torture/compile/pr52979-1.c: New test.
* gcc.c-torture/execute/pr52979-1.c: New test.

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