re PR c++/51242 ([C++11] Unable to use strongly typed enums as bit fields)
authorJonathan Wakely <jwakely.gcc@gmail.com>
Sat, 16 Feb 2013 01:07:11 +0000 (01:07 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Sat, 16 Feb 2013 01:07:11 +0000 (01:07 +0000)
/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.

Co-Authored-By: Paolo Carlini <paolo.carlini@oracle.com>
From-SVN: r196100

gcc/cp/ChangeLog
gcc/cp/decl2.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/enum23.C [new file with mode: 0644]

index 921c6a4..52fac3a 100644 (file)
@@ -1,3 +1,9 @@
+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.
+
 2013-02-15  Jason Merrill  <jason@redhat.com>
 
        PR c++/54276
index 4496395..82bc6f7 100644 (file)
@@ -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 1e260eb..d2e1e57 100644 (file)
@@ -1,3 +1,9 @@
+2013-02-15  Jonathan Wakely  <jwakely.gcc@gmail.com>
+           Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/51242
+       * g++.dg/cpp0x/enum23.C: New.
+
 2013-02-15  Oleg Endo  <olegendo@gcc.gnu.org>
 
        PR target/54685
diff --git a/gcc/testsuite/g++.dg/cpp0x/enum23.C b/gcc/testsuite/g++.dg/cpp0x/enum23.C
new file mode 100644 (file)
index 0000000..b2378e1
--- /dev/null
@@ -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 *-*-* } }
+};