On 02/15/2013 06:40 PM, Jason Merrill wrote:
The patch is OK. To deal with the warning, I would suggest putting the constrained type somewhere other than ENUM_UNDERLYING_TYPE that's shared between enums with fixed and non-fixed underlying types; having it in ENUM_UNDERLYING_TYPE isn't really correct anyway.
Ok, thanks. Then I committed the below and I'm keeping the PR open for the warning.

Thanks again,
Paolo.

///////////////////////
/cp
2013-02-15  Jonathan Wakely  <jwakely....@gmail.com>
            Paolo Carlini  <paolo.carl...@oracle.com>

        PR c++/51242
        * decl2.c (grokbitfield): Allow scoped enumeration types.

/testsuite
2013-02-15  Jonathan Wakely  <jwakely....@gmail.com>
            Paolo Carlini  <paolo.carl...@oracle.com>

        PR c++/51242
        * g++.dg/cpp0x/enum23.C: New.

Index: cp/decl2.c
===================================================================
--- cp/decl2.c  (revision 196095)
+++ cp/decl2.c  (working copy)
@@ -1028,7 +1028,7 @@ grokbitfield (const cp_declarator *declarator,
   if (TREE_CODE (value) == VOID_TYPE)
     return void_type_node;
 
-  if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))
+  if (!INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (value))
       && (POINTER_TYPE_P (value)
           || !dependent_type_p (TREE_TYPE (value))))
     {
Index: testsuite/g++.dg/cpp0x/enum23.C
===================================================================
--- testsuite/g++.dg/cpp0x/enum23.C     (revision 0)
+++ testsuite/g++.dg/cpp0x/enum23.C     (working copy)
@@ -0,0 +1,9 @@
+// PR c++/51242
+// { dg-do compile { target c++11 } }
+
+enum class MyEnum { A = 1 };
+
+struct MyClass
+{
+  MyEnum Field1 : 3; // { dg-bogus "warning: 'MyClass::Field1' is too small" 
"" { xfail *-*-* } }
+};

Reply via email to