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