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 921c6a4672d8ae2926823a48a26257f4f93a28d0..52fac3af74caefa05f62e9c760d6e73c918e9d71 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 4496395f4e26fa4642c4ca793eeb18a15a00beee..82bc6f79e5b63749478639acf870bb45856eecf5 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 1e260eb94a58b238b6238f15bc7bb1ba20e82fb5..d2e1e57a84b64692fe7510f1607f5dc21682143f 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 *-*-* } }
+};