From 33a1b314e5bf76d77eb3d5f130d4a43a6499d8c2 Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Fri, 28 Apr 2006 02:40:58 +0000 Subject: re PR c++/27292 (ICE on casts on bitfields) PR c++/27292 * tree.c (rvalue): Convert bitfields to their declared types. PR c++/27292 * g++.dg/conversion/bitfield4.C: New test. From-SVN: r113339 --- gcc/cp/ChangeLog | 3 +++ gcc/cp/tree.c | 5 +++-- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/conversion/bitfield4.C | 20 ++++++++++++++++++++ 4 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/conversion/bitfield4.C (limited to 'gcc') diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index aece2e8..17e3b29 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2006-04-27 Mark Mitchell + 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 a956205..60ba13f 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 5ae38b0..c8fc07c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2006-04-27 Mark Mitchell + + PR c++/27292 + * g++.dg/conversion/bitfield4.C: New test. + 2006-04-27 Eric Christopher * 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 0000000..75fe301 --- /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); +} -- cgit v1.1