aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2008-12-05 22:10:16 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2008-12-05 22:10:16 +0100
commit5eddced53a0b1a080297ae5420768750ae9e282d (patch)
treecee1b2906941519dc567d0b6dc148a9e80a5d21b
parent4f809983df5aff0181c6780a68a3d9359bc331db (diff)
downloadgcc-5eddced53a0b1a080297ae5420768750ae9e282d.zip
gcc-5eddced53a0b1a080297ae5420768750ae9e282d.tar.gz
gcc-5eddced53a0b1a080297ae5420768750ae9e282d.tar.bz2
re PR c++/35336 (Broken diagnostic: 'bit_field_ref' not supported by dump_expr)
PR c++/35336 * c-pretty-print.c (pp_c_postfix_expression): Handle BIT_FIELD_REF. (pp_c_expression): Likewise. * error.c (dump_expr): Handle BIT_FIELD_REF. * g++.dg/other/error30.C: New test. From-SVN: r142497
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/c-pretty-print.c31
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/error.c1
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/other/error30.C14
6 files changed, 62 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f86e4f7f..5318c3e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2008-12-05 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/35336
+ * c-pretty-print.c (pp_c_postfix_expression): Handle BIT_FIELD_REF.
+ (pp_c_expression): Likewise.
+
2008-12-05 Michael Meissner <meissner@linux.vnet.ibm.com>
PR c/38416
diff --git a/gcc/c-pretty-print.c b/gcc/c-pretty-print.c
index 9ee2738..cf1c6c3 100644
--- a/gcc/c-pretty-print.c
+++ b/gcc/c-pretty-print.c
@@ -1444,6 +1444,36 @@ pp_c_postfix_expression (c_pretty_printer *pp, tree e)
}
break;
+ case BIT_FIELD_REF:
+ {
+ tree type = TREE_TYPE (e);
+
+ type = signed_or_unsigned_type_for (TYPE_UNSIGNED (type), type);
+ if (type
+ && tree_int_cst_equal (TYPE_SIZE (type), TREE_OPERAND (e, 1)))
+ {
+ HOST_WIDE_INT bitpos = tree_low_cst (TREE_OPERAND (e, 2), 0);
+ HOST_WIDE_INT size = tree_low_cst (TYPE_SIZE (type), 0);
+ if ((bitpos % size) == 0)
+ {
+ pp_c_left_paren (pp);
+ pp_c_left_paren (pp);
+ pp_type_id (pp, type);
+ pp_c_star (pp);
+ pp_c_right_paren (pp);
+ pp_c_ampersand (pp);
+ pp_expression (pp, TREE_OPERAND (e, 0));
+ pp_c_right_paren (pp);
+ pp_c_left_bracket (pp);
+ pp_wide_integer (pp, bitpos / size);
+ pp_c_right_bracket (pp);
+ break;
+ }
+ }
+ pp_unsupported_tree (pp, e);
+ }
+ break;
+
case COMPLEX_CST:
case VECTOR_CST:
pp_c_compound_literal (pp, e);
@@ -1955,6 +1985,7 @@ pp_c_expression (c_pretty_printer *pp, tree e)
case ARRAY_REF:
case CALL_EXPR:
case COMPONENT_REF:
+ case BIT_FIELD_REF:
case COMPLEX_CST:
case COMPLEX_EXPR:
case VECTOR_CST:
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index c70307c..dab6ed0 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2008-12-05 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/35336
+ * error.c (dump_expr): Handle BIT_FIELD_REF.
+
2008-12-05 Sebastian Pop <sebastian.pop@amd.com>
PR bootstrap/38262
diff --git a/gcc/cp/error.c b/gcc/cp/error.c
index a2db157..4a63f1d 100644
--- a/gcc/cp/error.c
+++ b/gcc/cp/error.c
@@ -2071,6 +2071,7 @@ dump_expr (tree t, int flags)
case UNEQ_EXPR:
case LTGT_EXPR:
case COMPLEX_EXPR:
+ case BIT_FIELD_REF:
pp_expression (cxx_pp, t);
break;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index f4843d5..b841930 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2008-12-05 Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/35336
+ * g++.dg/other/error30.C: New test.
+
2008-12-05 Janis Johnson <janis187@us.ibm.com>
* lib/target-supports.exp (check_effective_target_hard_dfp): New.
diff --git a/gcc/testsuite/g++.dg/other/error30.C b/gcc/testsuite/g++.dg/other/error30.C
new file mode 100644
index 0000000..2df0e64
--- /dev/null
+++ b/gcc/testsuite/g++.dg/other/error30.C
@@ -0,0 +1,14 @@
+// PR c++/35336
+// { dg-do compile }
+// { dg-bogus "not supported by" "" { target *-*-* } 0 }
+
+struct A
+{
+ int i : 2;
+};
+
+void foo (bool b)
+{
+ A a;
+ (a.i || b) (); // { dg-error "cannot be used as" }
+}