From 4d0648ac8ff3df5e4525fe8da00906493742c72c Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Sat, 16 Feb 2013 01:07:11 +0000 Subject: [PATCH] re PR c++/51242 ([C++11] Unable to use strongly typed enums as bit fields) /cp 2013-02-15 Jonathan Wakely Paolo Carlini PR c++/51242 * decl2.c (grokbitfield): Allow scoped enumeration types. /testsuite 2013-02-15 Jonathan Wakely Paolo Carlini PR c++/51242 * g++.dg/cpp0x/enum23.C: New. Co-Authored-By: Paolo Carlini From-SVN: r196100 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/decl2.c | 2 +- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/g++.dg/cpp0x/enum23.C | 9 +++++++++ 4 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/enum23.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 921c6a4..52fac3a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2013-02-15 Jonathan Wakely + Paolo Carlini + + PR c++/51242 + * decl2.c (grokbitfield): Allow scoped enumeration types. + 2013-02-15 Jason Merrill PR c++/54276 diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 4496395..82bc6f7 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -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)))) { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1e260eb..d2e1e57 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2013-02-15 Jonathan Wakely + Paolo Carlini + + PR c++/51242 + * g++.dg/cpp0x/enum23.C: New. + 2013-02-15 Oleg Endo 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 index 0000000..b2378e1 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/enum23.C @@ -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 *-*-* } } +}; -- 2.7.4