From b5c0a77ec9b02f51b566ffbca83d02333932c064 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Tue, 4 May 2010 15:01:13 -0400 Subject: [PATCH] re PR c++/38064 ([c++0x] operator== doesn't work for enum classes) PR c++/38064 * typeck.c (cp_build_binary_op): Allow enums for <> as well. From-SVN: r159042 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/typeck.c | 6 ++++-- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/cpp0x/enum3.C | 10 ++++++++++ 4 files changed, 24 insertions(+), 2 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 634a74b9834..3f3b68ec34a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2010-05-04 Jason Merrill + + PR c++/38064 + * typeck.c (cp_build_binary_op): Allow enums for <> as well. + 2010-05-04 Paolo Carlini PR c++/43705 diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 46bc34dbbb6..e92175f1d32 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -4174,8 +4174,10 @@ cp_build_binary_op (location_t location, } build_type = boolean_type_node; - if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE) - && (code1 == INTEGER_TYPE || code1 == REAL_TYPE)) + if ((code0 == INTEGER_TYPE || code0 == REAL_TYPE + || code0 == ENUMERAL_TYPE) + && (code1 == INTEGER_TYPE || code1 == REAL_TYPE + || code1 == ENUMERAL_TYPE)) short_compare = 1; else if (code0 == POINTER_TYPE && code1 == POINTER_TYPE) result_type = composite_pointer_type (type0, type1, op0, op1, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 737a9f151e2..5b213ca82fd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-05-04 Jason Merrill + + PR c++/38064 + * g++.dg/cpp0x/enum3.C: Extend. + 2010-05-04 H.J. Lu PR target/43799 diff --git a/gcc/testsuite/g++.dg/cpp0x/enum3.C b/gcc/testsuite/g++.dg/cpp0x/enum3.C index 5555ab2aac8..5ae5e1a9d66 100644 --- a/gcc/testsuite/g++.dg/cpp0x/enum3.C +++ b/gcc/testsuite/g++.dg/cpp0x/enum3.C @@ -14,4 +14,14 @@ int main() E e = E::elem; if (!f (e == E::elem)) return 1; + if (!f (e <= E::elem)) + return 1; + if (!f (e >= E::elem)) + return 1; + if (f (e < E::elem)) + return 1; + if (f (e > E::elem)) + return 1; + if (f (e != E::elem)) + return 1; } -- 2.30.2