Patchwork [C++,/,RFC] PR 51242

login
register
mail settings
Submitter Paolo Carlini
Date Feb. 16, 2013, 1:08 a.m.
Message ID <511EDC1A.8090004@oracle.com>
Download mbox | patch
Permalink /patch/220912/
State New
Headers show

Comments

Paolo Carlini - Feb. 16, 2013, 1:08 a.m.
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.gcc@gmail.com>
	    Paolo Carlini  <paolo.carlini@oracle.com>

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

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

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

Patch

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