summaryrefslogtreecommitdiffstats
path: root/gcc
diff options
context:
space:
mode:
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>2006-04-28 02:40:58 +0000
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>2006-04-28 02:40:58 +0000
commitb0c53f6e6cf83417d524362c52a07f290054f802 (patch)
tree89011bc674059b1f753d7dcb509a311ee72ff7b4 /gcc
parentd9af2c1c9ee540325ee5cd3d19e5ca46f0610b57 (diff)
downloadppe42-gcc-b0c53f6e6cf83417d524362c52a07f290054f802.tar.gz
ppe42-gcc-b0c53f6e6cf83417d524362c52a07f290054f802.zip
PR c++/27292
* tree.c (rvalue): Convert bitfields to their declared types. PR c++/27292 * g++.dg/conversion/bitfield4.C: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@113339 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog3
-rw-r--r--gcc/cp/tree.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/conversion/bitfield4.C20
4 files changed, 31 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index aece2e85da0..17e3b291c21 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,8 @@
2006-04-27 Mark Mitchell <mark@codesourcery.com>
+ PR c++/27292
+ * tree.c (rvalue): Convert bitfields to their declared types.
+
PR c++/27102
* typeck2.c (cxx_incomplete_type_diagnostic): Handle
TYPENAME_TYPE.
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c
index a956205a136..60ba13f9936 100644
--- a/gcc/cp/tree.c
+++ b/gcc/cp/tree.c
@@ -372,8 +372,9 @@ rvalue (tree expr)
if (real_lvalue_p (expr))
{
type = is_bitfield_expr_with_lowered_type (expr);
- if (!type)
- type = TREE_TYPE (expr);
+ if (type)
+ return cp_convert (TYPE_MAIN_VARIANT (type), expr);
+ type = TREE_TYPE (expr);
/* [basic.lval]
Non-class rvalues always have cv-unqualified types. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 5ae38b0e723..c8fc07c4798 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2006-04-27 Mark Mitchell <mark@codesourcery.com>
+
+ PR c++/27292
+ * g++.dg/conversion/bitfield4.C: New test.
+
2006-04-27 Eric Christopher <echristo@apple.com>
* gcc.dg/pragma-ms_struct.c: New.
diff --git a/gcc/testsuite/g++.dg/conversion/bitfield4.C b/gcc/testsuite/g++.dg/conversion/bitfield4.C
new file mode 100644
index 00000000000..75fe3016e14
--- /dev/null
+++ b/gcc/testsuite/g++.dg/conversion/bitfield4.C
@@ -0,0 +1,20 @@
+// PR c++/27292
+
+enum ColorRole
+{
+ WindowText, Button
+};
+
+struct QPalette {
+
+ColorRole bg_role:8;
+
+ bool hasBackground();
+};
+
+
+bool
+QPalette::hasBackground ()
+{
+ return (ColorRole (bg_role) != WindowText);
+}
OpenPOWER on IntegriCloud